Content-Type: multipart/related; start=; boundary=----------dXqVO0m2IHDhy6E2W6tQyG Content-Location: http://bop.diba.es/default.asp?C=recerca.edicions_anteriors&f1=20/04/2011&f2=20/04/2011&sl=0&sec=2.2&o=1 Subject: =?utf-8?Q?-=20Butllet=C3=AD=20Oficial=20de=20la=20Prov=C3=ADncia=20de=20Barcelona?= MIME-Version: 1.0 ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline; filename=default.htm Content-Type: text/html; charset=iso-8859-1; name=default.htm Content-ID: Content-Location: http://bop.diba.es/default.asp?C=recerca.edicions_anteriors&f1=20/04/2011&f2=20/04/2011&sl=0&sec=2.2&o=1 Content-Transfer-Encoding: 8bit - Butlletí Oficial de la Província de Barcelona

Butlletí Oficial de la Província de Barcelona

Recursos

Sumari per emissor

Imprimir

Criteris de cerca

Secció:
Juntes Electorals
Data de publicació:
Des de 20/04/2011 Fins a 20/04/2011

S'han trobat 14 resultats per la seva cerca, mostrant del 1 al 14.

Junta Electoral Zona d'Arenys de Mar

  • Registre: 062011002009 - Data publicació: 20/04/2011

    Relació de candidatures presentades amb motiu de les eleccions municipals.

Junta Electoral Zona d'Igualada

  • Registre: 062011002015 - Data publicació: 20/04/2011

    Relació de candidatures presentades amb motiu de les eleccions municipals.

Junta Electoral Zona de Barcelona

  • Registre: 062011002021 - Data publicació: 20/04/2011

    Relació de candidatures presentades amb motiu de les eleccions municipals.

Junta Electoral Zona de Berga

  • Registre: 062011002019 - Data publicació: 20/04/2011

    Relació de candidatures presentades amb motiu de les eleccions municipals.

Junta Electoral Zona de Granollers

  • Registre: 062011002024 - Data publicació: 20/04/2011

    Relació de candidatures presentades amb motiu de les eleccions municipals.

Junta Electoral Zona de L'Hospitalet de Llobregat

  • Registre: 062011002020 - Data publicació: 20/04/2011

    Relació de candidatures presentades amb motiu de les eleccions municipals.

Junta Electoral Zona de Manresa

  • Registre: 062011002008 - Data publicació: 20/04/2011

    Relació de candidatures presentades amb motiu de les eleccions municipals.

Junta Electoral Zona de Mataró

  • Registre: 062011002016 - Data publicació: 20/04/2011

    Relación de candidaturas presentadas debido a las elecciones municipales.

Junta Electoral Zona de Sabadell

  • Registre: 062011002013 - Data publicació: 20/04/2011

    Relación de candidaturas presentadas debido a las elecciones municipales.

Junta Electoral Zona de Sant Feliu de Llobregat

  • Registre: 062011002037 - Data publicació: 20/04/2011

    Relació de candidatures presentades amb motiu de les eleccions municipals.

Junta Electoral Zona de Terrassa

  • Registre: 062011002012 - Data publicació: 20/04/2011

    Relació de candidatures presentades amb motiu de les eleccions municipals.

Junta Electoral Zona de Vic

  • Registre: 062011002038 - Data publicació: 20/04/2011

    Relació de candidatures presentades amb motiu de les eleccions municipals.

Junta Electoral Zona de Vilafranca del Penedès

  • Registre: 062011002010 - Data publicació: 20/04/2011

    Relación de candidaturas presentadas debido a las elecciones municipales.

Junta Electoral Zona de Vilanova i la Geltrú

  • Registre: 062011002014 - Data publicació: 20/04/2011

    Relació de candidatures presentades amb motiu de les eleccions municipals.

Pujar

Accessibilitat | Avís legal | Contacte

Diputació de Barcelona

------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline; filename=festivos.js Content-Type: application/x-javascript; charset=utf-8; name=festivos.js Content-Location: http://bop.diba.es/js/festivos.js Content-Transfer-Encoding: Base64 77u/dmFyIGZlc3Rpdm9zID0gWyIxLzUvMjAxMCINCiAgICAgICAgICAgICAgLCAi MTEvOS8yMDEwIg0KICAgICAgICAgICAgICAsICIyNC85LzIwMTAiDQogICAgICAg ICAgICAgICwgIjEyLzEwLzIwMTAiDQogICAgICAgICAgICAgICwgIjEvMTEvMjAx MCINCiAgICAgICAgICAgICAgLCAiNi8xMi8yMDEwIg0KICAgICAgICAgICAgICAs ICI4LzEyLzIwMTAiDQogICAgICAgICAgICAgICwgIjI1LzEyLzIwMTAiDQogICAg ICAgICAgICAgICwgIjEvMS8yMDExIg0KICAgICAgICAgICAgICAsICI2LzEvMjAx MSINCiAgICAgICAgICAgICAgLCAiNy8zLzIwMTEiDQogICAgICAgICAgICAgICwg IjIyLzQvMjAxMSINCiAgICAgICAgICAgICAgLCAiMjUvNC8yMDExIg0KICAgICAg ICAgICAgICAsICIxMy82LzIwMTEiDQogICAgICAgICAgICAgICwgIjI0LzYvMjAx MSINCiAgICAgICAgICAgICAgLCAiMTUvOC8yMDExIg0KICAgICAgICAgICAgICAs ICIyNC85LzIwMTEiDQogICAgICAgICAgICAgICwgIjEyLzEwLzIwMTEiDQogICAg ICAgICAgICAgICwgIjEvMTEvMjAxMSINCiAgICAgICAgICAgICAgLCAiNi8xMi8y MDExIg0KICAgICAgICAgICAgICAsICI4LzEyLzIwMTEiDQogICAgICAgICAgICAg ICwgIjI2LzEyLzIwMTEiXTsNCgkJCSAgDQovLyBhY3R1YWxpdHphciB0YW1iw6k6 IC9tdmMvZmVzdGl1cy5hc3A= ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline; filename=jquery.js Content-Type: application/x-javascript; name=jquery.js Content-Location: http://bop.diba.es/js/jquery.js Content-Transfer-Encoding: Base64 LyohCiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjEuNC4yCiAqIGh0dHA6 Ly9qcXVlcnkuY29tLwogKgogKiBDb3B5cmlnaHQgMjAxMCwgSm9obiBSZXNpZwog KiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBs aWNlbnNlcy4KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQogKgogKiBJbmNs dWRlcyBTaXp6bGUuanMKICogaHR0cDovL3NpenpsZWpzLmNvbS8KICogQ29weXJp Z2h0IDIwMTAsIFRoZSBEb2pvIEZvdW5kYXRpb24KICogUmVsZWFzZWQgdW5kZXIg dGhlIE1JVCwgQlNELCBhbmQgR1BMIExpY2Vuc2VzLgogKgogKiBEYXRlOiBTYXQg RmViIDEzIDIyOjMzOjQ4IDIwMTAgLTA1MDAKICovCihmdW5jdGlvbihBLHcpe2Z1 bmN0aW9uIG1hKCl7aWYoIWMuaXNSZWFkeSl7dHJ5e3MuZG9jdW1lbnRFbGVtZW50 LmRvU2Nyb2xsKCJsZWZ0Iil9Y2F0Y2goYSl7c2V0VGltZW91dChtYSwxKTtyZXR1 cm59Yy5yZWFkeSgpfX1mdW5jdGlvbiBRYShhLGIpe2Iuc3JjP2MuYWpheCh7dXJs OmIuc3JjLGFzeW5jOmZhbHNlLGRhdGFUeXBlOiJzY3JpcHQifSk6Yy5nbG9iYWxF dmFsKGIudGV4dHx8Yi50ZXh0Q29udGVudHx8Yi5pbm5lckhUTUx8fCIiKTtiLnBh cmVudE5vZGUmJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKX1mdW5jdGlvbiBY KGEsYixkLGYsZSxqKXt2YXIgaT1hLmxlbmd0aDtpZih0eXBlb2YgYj09PSJvYmpl Y3QiKXtmb3IodmFyIG8gaW4gYilYKGEsbyxiW29dLGYsZSxkKTtyZXR1cm4gYX1p ZihkIT09dyl7Zj0haiYmZiYmYy5pc0Z1bmN0aW9uKGQpO2ZvcihvPTA7bzxpO28r KyllKGFbb10sYixmP2QuY2FsbChhW29dLG8sZShhW29dLGIpKTpkLGopO3JldHVy biBhfXJldHVybiBpPwplKGFbMF0sYik6d31mdW5jdGlvbiBKKCl7cmV0dXJuKG5l dyBEYXRlKS5nZXRUaW1lKCl9ZnVuY3Rpb24gWSgpe3JldHVybiBmYWxzZX1mdW5j dGlvbiBaKCl7cmV0dXJuIHRydWV9ZnVuY3Rpb24gbmEoYSxiLGQpe2RbMF0udHlw ZT1hO3JldHVybiBjLmV2ZW50LmhhbmRsZS5hcHBseShiLGQpfWZ1bmN0aW9uIG9h KGEpe3ZhciBiLGQ9W10sZj1bXSxlPWFyZ3VtZW50cyxqLGksbyxrLG4scjtpPWMu ZGF0YSh0aGlzLCJldmVudHMiKTtpZighKGEubGl2ZUZpcmVkPT09dGhpc3x8IWl8 fCFpLmxpdmV8fGEuYnV0dG9uJiZhLnR5cGU9PT0iY2xpY2siKSl7YS5saXZlRmly ZWQ9dGhpczt2YXIgdT1pLmxpdmUuc2xpY2UoMCk7Zm9yKGs9MDtrPHUubGVuZ3Ro O2srKyl7aT11W2tdO2kub3JpZ1R5cGUucmVwbGFjZShPLCIiKT09PWEudHlwZT9m LnB1c2goaS5zZWxlY3Rvcik6dS5zcGxpY2Uoay0tLDEpfWo9YyhhLnRhcmdldCku Y2xvc2VzdChmLGEuY3VycmVudFRhcmdldCk7bj0wO2ZvcihyPQpqLmxlbmd0aDtu PHI7bisrKWZvcihrPTA7azx1Lmxlbmd0aDtrKyspe2k9dVtrXTtpZihqW25dLnNl bGVjdG9yPT09aS5zZWxlY3Rvcil7bz1qW25dLmVsZW07Zj1udWxsO2lmKGkucHJl VHlwZT09PSJtb3VzZWVudGVyInx8aS5wcmVUeXBlPT09Im1vdXNlbGVhdmUiKWY9 YyhhLnJlbGF0ZWRUYXJnZXQpLmNsb3Nlc3QoaS5zZWxlY3RvcilbMF07aWYoIWZ8 fGYhPT1vKWQucHVzaCh7ZWxlbTpvLGhhbmRsZU9iajppfSl9fW49MDtmb3Iocj1k Lmxlbmd0aDtuPHI7bisrKXtqPWRbbl07YS5jdXJyZW50VGFyZ2V0PWouZWxlbTth LmRhdGE9ai5oYW5kbGVPYmouZGF0YTthLmhhbmRsZU9iaj1qLmhhbmRsZU9iajtp ZihqLmhhbmRsZU9iai5vcmlnSGFuZGxlci5hcHBseShqLmVsZW0sZSk9PT1mYWxz ZSl7Yj1mYWxzZTticmVha319cmV0dXJuIGJ9fWZ1bmN0aW9uIHBhKGEsYil7cmV0 dXJuImxpdmUuIisoYSYmYSE9PSIqIj9hKyIuIjoiIikrYi5yZXBsYWNlKC9cLi9n LCJgIikucmVwbGFjZSgvIC9nLAoiJiIpfWZ1bmN0aW9uIHFhKGEpe3JldHVybiFh fHwhYS5wYXJlbnROb2RlfHxhLnBhcmVudE5vZGUubm9kZVR5cGU9PT0xMX1mdW5j dGlvbiByYShhLGIpe3ZhciBkPTA7Yi5lYWNoKGZ1bmN0aW9uKCl7aWYodGhpcy5u b2RlTmFtZT09PShhW2RdJiZhW2RdLm5vZGVOYW1lKSl7dmFyIGY9Yy5kYXRhKGFb ZCsrXSksZT1jLmRhdGEodGhpcyxmKTtpZihmPWYmJmYuZXZlbnRzKXtkZWxldGUg ZS5oYW5kbGU7ZS5ldmVudHM9e307Zm9yKHZhciBqIGluIGYpZm9yKHZhciBpIGlu IGZbal0pYy5ldmVudC5hZGQodGhpcyxqLGZbal1baV0sZltqXVtpXS5kYXRhKX19 fSl9ZnVuY3Rpb24gc2EoYSxiLGQpe3ZhciBmLGUsajtiPWImJmJbMF0/YlswXS5v d25lckRvY3VtZW50fHxiWzBdOnM7aWYoYS5sZW5ndGg9PT0xJiZ0eXBlb2YgYVsw XT09PSJzdHJpbmciJiZhWzBdLmxlbmd0aDw1MTImJmI9PT1zJiYhdGEudGVzdChh WzBdKSYmKGMuc3VwcG9ydC5jaGVja0Nsb25lfHwhdWEudGVzdChhWzBdKSkpe2U9 CnRydWU7aWYoaj1jLmZyYWdtZW50c1thWzBdXSlpZihqIT09MSlmPWp9aWYoIWYp e2Y9Yi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Yy5jbGVhbihhLGIsZixkKX1p ZihlKWMuZnJhZ21lbnRzW2FbMF1dPWo/ZjoxO3JldHVybntmcmFnbWVudDpmLGNh Y2hlYWJsZTplfX1mdW5jdGlvbiBLKGEsYil7dmFyIGQ9e307Yy5lYWNoKHZhLmNv bmNhdC5hcHBseShbXSx2YS5zbGljZSgwLGIpKSxmdW5jdGlvbigpe2RbdGhpc109 YX0pO3JldHVybiBkfWZ1bmN0aW9uIHdhKGEpe3JldHVybiJzY3JvbGxUbyJpbiBh JiZhLmRvY3VtZW50P2E6YS5ub2RlVHlwZT09PTk/YS5kZWZhdWx0Vmlld3x8YS5w YXJlbnRXaW5kb3c6ZmFsc2V9dmFyIGM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3 IGMuZm4uaW5pdChhLGIpfSxSYT1BLmpRdWVyeSxTYT1BLiQscz1BLmRvY3VtZW50 LFQsVGE9L15bXjxdKig8W1x3XFddKz4pW14+XSokfF4jKFtcdy1dKykkLyxVYT0v Xi5bXjojXFtcLixdKiQvLFZhPS9cUy8sCldhPS9eKFxzfFx1MDBBMCkrfChcc3xc dTAwQTApKyQvZyxYYT0vXjwoXHcrKVxzKlwvPz4oPzo8XC9cMT4pPyQvLFA9bmF2 aWdhdG9yLnVzZXJBZ2VudCx4YT1mYWxzZSxRPVtdLEwsJD1PYmplY3QucHJvdG90 eXBlLnRvU3RyaW5nLGFhPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHks YmE9QXJyYXkucHJvdG90eXBlLnB1c2gsUj1BcnJheS5wcm90b3R5cGUuc2xpY2Us eWE9QXJyYXkucHJvdG90eXBlLmluZGV4T2Y7Yy5mbj1jLnByb3RvdHlwZT17aW5p dDpmdW5jdGlvbihhLGIpe3ZhciBkLGY7aWYoIWEpcmV0dXJuIHRoaXM7aWYoYS5u b2RlVHlwZSl7dGhpcy5jb250ZXh0PXRoaXNbMF09YTt0aGlzLmxlbmd0aD0xO3Jl dHVybiB0aGlzfWlmKGE9PT0iYm9keSImJiFiKXt0aGlzLmNvbnRleHQ9czt0aGlz WzBdPXMuYm9keTt0aGlzLnNlbGVjdG9yPSJib2R5Ijt0aGlzLmxlbmd0aD0xO3Jl dHVybiB0aGlzfWlmKHR5cGVvZiBhPT09InN0cmluZyIpaWYoKGQ9VGEuZXhlYyhh KSkmJgooZFsxXXx8IWIpKWlmKGRbMV0pe2Y9Yj9iLm93bmVyRG9jdW1lbnR8fGI6 cztpZihhPVhhLmV4ZWMoYSkpaWYoYy5pc1BsYWluT2JqZWN0KGIpKXthPVtzLmNy ZWF0ZUVsZW1lbnQoYVsxXSldO2MuZm4uYXR0ci5jYWxsKGEsYix0cnVlKX1lbHNl IGE9W2YuY3JlYXRlRWxlbWVudChhWzFdKV07ZWxzZXthPXNhKFtkWzFdXSxbZl0p O2E9KGEuY2FjaGVhYmxlP2EuZnJhZ21lbnQuY2xvbmVOb2RlKHRydWUpOmEuZnJh Z21lbnQpLmNoaWxkTm9kZXN9cmV0dXJuIGMubWVyZ2UodGhpcyxhKX1lbHNle2lm KGI9cy5nZXRFbGVtZW50QnlJZChkWzJdKSl7aWYoYi5pZCE9PWRbMl0pcmV0dXJu IFQuZmluZChhKTt0aGlzLmxlbmd0aD0xO3RoaXNbMF09Yn10aGlzLmNvbnRleHQ9 czt0aGlzLnNlbGVjdG9yPWE7cmV0dXJuIHRoaXN9ZWxzZSBpZighYiYmL15cdysk Ly50ZXN0KGEpKXt0aGlzLnNlbGVjdG9yPWE7dGhpcy5jb250ZXh0PXM7YT1zLmdl dEVsZW1lbnRzQnlUYWdOYW1lKGEpO3JldHVybiBjLm1lcmdlKHRoaXMsCmEpfWVs c2UgcmV0dXJuIWJ8fGIuanF1ZXJ5PyhifHxUKS5maW5kKGEpOmMoYikuZmluZChh KTtlbHNlIGlmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4gVC5yZWFkeShhKTtpZihh LnNlbGVjdG9yIT09dyl7dGhpcy5zZWxlY3Rvcj1hLnNlbGVjdG9yO3RoaXMuY29u dGV4dD1hLmNvbnRleHR9cmV0dXJuIGMubWFrZUFycmF5KGEsdGhpcyl9LHNlbGVj dG9yOiIiLGpxdWVyeToiMS40LjIiLGxlbmd0aDowLHNpemU6ZnVuY3Rpb24oKXty ZXR1cm4gdGhpcy5sZW5ndGh9LHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gUi5j YWxsKHRoaXMsMCl9LGdldDpmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD90aGlz LnRvQXJyYXkoKTphPDA/dGhpcy5zbGljZShhKVswXTp0aGlzW2FdfSxwdXNoU3Rh Y2s6ZnVuY3Rpb24oYSxiLGQpe3ZhciBmPWMoKTtjLmlzQXJyYXkoYSk/YmEuYXBw bHkoZixhKTpjLm1lcmdlKGYsYSk7Zi5wcmV2T2JqZWN0PXRoaXM7Zi5jb250ZXh0 PXRoaXMuY29udGV4dDtpZihiPT09CiJmaW5kIilmLnNlbGVjdG9yPXRoaXMuc2Vs ZWN0b3IrKHRoaXMuc2VsZWN0b3I/IiAiOiIiKStkO2Vsc2UgaWYoYilmLnNlbGVj dG9yPXRoaXMuc2VsZWN0b3IrIi4iK2IrIigiK2QrIikiO3JldHVybiBmfSxlYWNo OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGMuZWFjaCh0aGlzLGEsYil9LHJlYWR5OmZ1 bmN0aW9uKGEpe2MuYmluZFJlYWR5KCk7aWYoYy5pc1JlYWR5KWEuY2FsbChzLGMp O2Vsc2UgUSYmUS5wdXNoKGEpO3JldHVybiB0aGlzfSxlcTpmdW5jdGlvbihhKXty ZXR1cm4gYT09PS0xP3RoaXMuc2xpY2UoYSk6dGhpcy5zbGljZShhLCthKzEpfSxm aXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9u KCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0 aGlzLnB1c2hTdGFjayhSLmFwcGx5KHRoaXMsYXJndW1lbnRzKSwic2xpY2UiLFIu Y2FsbChhcmd1bWVudHMpLmpvaW4oIiwiKSl9LG1hcDpmdW5jdGlvbihhKXtyZXR1 cm4gdGhpcy5wdXNoU3RhY2soYy5tYXAodGhpcywKZnVuY3Rpb24oYixkKXtyZXR1 cm4gYS5jYWxsKGIsZCxiKX0pKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu cHJldk9iamVjdHx8YyhudWxsKX0scHVzaDpiYSxzb3J0OltdLnNvcnQsc3BsaWNl OltdLnNwbGljZX07Yy5mbi5pbml0LnByb3RvdHlwZT1jLmZuO2MuZXh0ZW5kPWMu Zm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzWzBdfHx7fSxiPTEs ZD1hcmd1bWVudHMubGVuZ3RoLGY9ZmFsc2UsZSxqLGksbztpZih0eXBlb2YgYT09 PSJib29sZWFuIil7Zj1hO2E9YXJndW1lbnRzWzFdfHx7fTtiPTJ9aWYodHlwZW9m IGEhPT0ib2JqZWN0IiYmIWMuaXNGdW5jdGlvbihhKSlhPXt9O2lmKGQ9PT1iKXth PXRoaXM7LS1ifWZvcig7YjxkO2IrKylpZigoZT1hcmd1bWVudHNbYl0pIT1udWxs KWZvcihqIGluIGUpe2k9YVtqXTtvPWVbal07aWYoYSE9PW8paWYoZiYmbyYmKGMu aXNQbGFpbk9iamVjdChvKXx8Yy5pc0FycmF5KG8pKSl7aT1pJiYoYy5pc1BsYWlu T2JqZWN0KGkpfHwKYy5pc0FycmF5KGkpKT9pOmMuaXNBcnJheShvKT9bXTp7fTth W2pdPWMuZXh0ZW5kKGYsaSxvKX1lbHNlIGlmKG8hPT13KWFbal09b31yZXR1cm4g YX07Yy5leHRlbmQoe25vQ29uZmxpY3Q6ZnVuY3Rpb24oYSl7QS4kPVNhO2lmKGEp QS5qUXVlcnk9UmE7cmV0dXJuIGN9LGlzUmVhZHk6ZmFsc2UscmVhZHk6ZnVuY3Rp b24oKXtpZighYy5pc1JlYWR5KXtpZighcy5ib2R5KXJldHVybiBzZXRUaW1lb3V0 KGMucmVhZHksMTMpO2MuaXNSZWFkeT10cnVlO2lmKFEpe2Zvcih2YXIgYSxiPTA7 YT1RW2IrK107KWEuY2FsbChzLGMpO1E9bnVsbH1jLmZuLnRyaWdnZXJIYW5kbGVy JiZjKHMpLnRyaWdnZXJIYW5kbGVyKCJyZWFkeSIpfX0sYmluZFJlYWR5OmZ1bmN0 aW9uKCl7aWYoIXhhKXt4YT10cnVlO2lmKHMucmVhZHlTdGF0ZT09PSJjb21wbGV0 ZSIpcmV0dXJuIGMucmVhZHkoKTtpZihzLmFkZEV2ZW50TGlzdGVuZXIpe3MuYWRk RXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsCkwsZmFsc2UpO0EuYWRk RXZlbnRMaXN0ZW5lcigibG9hZCIsYy5yZWFkeSxmYWxzZSl9ZWxzZSBpZihzLmF0 dGFjaEV2ZW50KXtzLmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLEwp O0EuYXR0YWNoRXZlbnQoIm9ubG9hZCIsYy5yZWFkeSk7dmFyIGE9ZmFsc2U7dHJ5 e2E9QS5mcmFtZUVsZW1lbnQ9PW51bGx9Y2F0Y2goYil7fXMuZG9jdW1lbnRFbGVt ZW50LmRvU2Nyb2xsJiZhJiZtYSgpfX19LGlzRnVuY3Rpb246ZnVuY3Rpb24oYSl7 cmV0dXJuICQuY2FsbChhKT09PSJbb2JqZWN0IEZ1bmN0aW9uXSJ9LGlzQXJyYXk6 ZnVuY3Rpb24oYSl7cmV0dXJuICQuY2FsbChhKT09PSJbb2JqZWN0IEFycmF5XSJ9 LGlzUGxhaW5PYmplY3Q6ZnVuY3Rpb24oYSl7aWYoIWF8fCQuY2FsbChhKSE9PSJb b2JqZWN0IE9iamVjdF0ifHxhLm5vZGVUeXBlfHxhLnNldEludGVydmFsKXJldHVy biBmYWxzZTtpZihhLmNvbnN0cnVjdG9yJiYhYWEuY2FsbChhLCJjb25zdHJ1Y3Rv ciIpJiYhYWEuY2FsbChhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwKImlzUHJvdG90 eXBlT2YiKSlyZXR1cm4gZmFsc2U7dmFyIGI7Zm9yKGIgaW4gYSk7cmV0dXJuIGI9 PT13fHxhYS5jYWxsKGEsYil9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oYSl7Zm9y KHZhciBiIGluIGEpcmV0dXJuIGZhbHNlO3JldHVybiB0cnVlfSxlcnJvcjpmdW5j dGlvbihhKXt0aHJvdyBhO30scGFyc2VKU09OOmZ1bmN0aW9uKGEpe2lmKHR5cGVv ZiBhIT09InN0cmluZyJ8fCFhKXJldHVybiBudWxsO2E9Yy50cmltKGEpO2lmKC9e W1xdLDp7fVxzXSokLy50ZXN0KGEucmVwbGFjZSgvXFwoPzpbIlxcXC9iZm5ydF18 dVswLTlhLWZBLUZdezR9KS9nLCJAIikucmVwbGFjZSgvIlteIlxcXG5ccl0qInx0 cnVlfGZhbHNlfG51bGx8LT9cZCsoPzpcLlxkKik/KD86W2VFXVsrXC1dP1xkKyk/ L2csIl0iKS5yZXBsYWNlKC8oPzpefDp8LCkoPzpccypcWykrL2csIiIpKSlyZXR1 cm4gQS5KU09OJiZBLkpTT04ucGFyc2U/QS5KU09OLnBhcnNlKGEpOihuZXcgRnVu Y3Rpb24oInJldHVybiAiKwphKSkoKTtlbHNlIGMuZXJyb3IoIkludmFsaWQgSlNP TjogIithKX0sbm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlvbihh KXtpZihhJiZWYS50ZXN0KGEpKXt2YXIgYj1zLmdldEVsZW1lbnRzQnlUYWdOYW1l KCJoZWFkIilbMF18fHMuZG9jdW1lbnRFbGVtZW50LGQ9cy5jcmVhdGVFbGVtZW50 KCJzY3JpcHQiKTtkLnR5cGU9InRleHQvamF2YXNjcmlwdCI7aWYoYy5zdXBwb3J0 LnNjcmlwdEV2YWwpZC5hcHBlbmRDaGlsZChzLmNyZWF0ZVRleHROb2RlKGEpKTtl bHNlIGQudGV4dD1hO2IuaW5zZXJ0QmVmb3JlKGQsYi5maXJzdENoaWxkKTtiLnJl bW92ZUNoaWxkKGQpfX0sbm9kZU5hbWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5u b2RlTmFtZSYmYS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT09Yi50b1VwcGVyQ2Fz ZSgpfSxlYWNoOmZ1bmN0aW9uKGEsYixkKXt2YXIgZixlPTAsaj1hLmxlbmd0aCxp PWo9PT13fHxjLmlzRnVuY3Rpb24oYSk7aWYoZClpZihpKWZvcihmIGluIGEpe2lm KGIuYXBwbHkoYVtmXSwKZCk9PT1mYWxzZSlicmVha31lbHNlIGZvcig7ZTxqOyl7 aWYoYi5hcHBseShhW2UrK10sZCk9PT1mYWxzZSlicmVha31lbHNlIGlmKGkpZm9y KGYgaW4gYSl7aWYoYi5jYWxsKGFbZl0sZixhW2ZdKT09PWZhbHNlKWJyZWFrfWVs c2UgZm9yKGQ9YVswXTtlPGomJmIuY2FsbChkLGUsZCkhPT1mYWxzZTtkPWFbKytl XSk7cmV0dXJuIGF9LHRyaW06ZnVuY3Rpb24oYSl7cmV0dXJuKGF8fCIiKS5yZXBs YWNlKFdhLCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGEsYil7Yj1ifHxbXTtpZihh IT1udWxsKWEubGVuZ3RoPT1udWxsfHx0eXBlb2YgYT09PSJzdHJpbmcifHxjLmlz RnVuY3Rpb24oYSl8fHR5cGVvZiBhIT09ImZ1bmN0aW9uIiYmYS5zZXRJbnRlcnZh bD9iYS5jYWxsKGIsYSk6Yy5tZXJnZShiLGEpO3JldHVybiBifSxpbkFycmF5OmZ1 bmN0aW9uKGEsYil7aWYoYi5pbmRleE9mKXJldHVybiBiLmluZGV4T2YoYSk7Zm9y KHZhciBkPTAsZj1iLmxlbmd0aDtkPGY7ZCsrKWlmKGJbZF09PT0KYSlyZXR1cm4g ZDtyZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oYSxiKXt2YXIgZD1hLmxlbmd0aCxm PTA7aWYodHlwZW9mIGIubGVuZ3RoPT09Im51bWJlciIpZm9yKHZhciBlPWIubGVu Z3RoO2Y8ZTtmKyspYVtkKytdPWJbZl07ZWxzZSBmb3IoO2JbZl0hPT13OylhW2Qr K109YltmKytdO2EubGVuZ3RoPWQ7cmV0dXJuIGF9LGdyZXA6ZnVuY3Rpb24oYSxi LGQpe2Zvcih2YXIgZj1bXSxlPTAsaj1hLmxlbmd0aDtlPGo7ZSsrKSFkIT09IWIo YVtlXSxlKSYmZi5wdXNoKGFbZV0pO3JldHVybiBmfSxtYXA6ZnVuY3Rpb24oYSxi LGQpe2Zvcih2YXIgZj1bXSxlLGo9MCxpPWEubGVuZ3RoO2o8aTtqKyspe2U9Yihh W2pdLGosZCk7aWYoZSE9bnVsbClmW2YubGVuZ3RoXT1lfXJldHVybiBmLmNvbmNh dC5hcHBseShbXSxmKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGEsYixkKXtpZihh cmd1bWVudHMubGVuZ3RoPT09MilpZih0eXBlb2YgYj09PSJzdHJpbmciKXtkPWE7 YT1kW2JdO2I9d31lbHNlIGlmKGImJgohYy5pc0Z1bmN0aW9uKGIpKXtkPWI7Yj13 fWlmKCFiJiZhKWI9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShkfHx0aGlzLGFy Z3VtZW50cyl9O2lmKGEpYi5ndWlkPWEuZ3VpZD1hLmd1aWR8fGIuZ3VpZHx8Yy5n dWlkKys7cmV0dXJuIGJ9LHVhTWF0Y2g6ZnVuY3Rpb24oYSl7YT1hLnRvTG93ZXJD YXNlKCk7YT0vKHdlYmtpdClbIFwvXShbXHcuXSspLy5leGVjKGEpfHwvKG9wZXJh KSg/Oi4qdmVyc2lvbik/WyBcL10oW1x3Ll0rKS8uZXhlYyhhKXx8Lyhtc2llKSAo W1x3Ll0rKS8uZXhlYyhhKXx8IS9jb21wYXRpYmxlLy50ZXN0KGEpJiYvKG1vemls bGEpKD86Lio/IHJ2OihbXHcuXSspKT8vLmV4ZWMoYSl8fFtdO3JldHVybnticm93 c2VyOmFbMV18fCIiLHZlcnNpb246YVsyXXx8IjAifX0sYnJvd3Nlcjp7fX0pO1A9 Yy51YU1hdGNoKFApO2lmKFAuYnJvd3Nlcil7Yy5icm93c2VyW1AuYnJvd3Nlcl09 dHJ1ZTtjLmJyb3dzZXIudmVyc2lvbj1QLnZlcnNpb259aWYoYy5icm93c2VyLndl YmtpdCljLmJyb3dzZXIuc2FmYXJpPQp0cnVlO2lmKHlhKWMuaW5BcnJheT1mdW5j dGlvbihhLGIpe3JldHVybiB5YS5jYWxsKGIsYSl9O1Q9YyhzKTtpZihzLmFkZEV2 ZW50TGlzdGVuZXIpTD1mdW5jdGlvbigpe3MucmVtb3ZlRXZlbnRMaXN0ZW5lcigi RE9NQ29udGVudExvYWRlZCIsTCxmYWxzZSk7Yy5yZWFkeSgpfTtlbHNlIGlmKHMu YXR0YWNoRXZlbnQpTD1mdW5jdGlvbigpe2lmKHMucmVhZHlTdGF0ZT09PSJjb21w bGV0ZSIpe3MuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsTCk7Yy5y ZWFkeSgpfX07KGZ1bmN0aW9uKCl7Yy5zdXBwb3J0PXt9O3ZhciBhPXMuZG9jdW1l bnRFbGVtZW50LGI9cy5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxkPXMuY3JlYXRl RWxlbWVudCgiZGl2IiksZj0ic2NyaXB0IitKKCk7ZC5zdHlsZS5kaXNwbGF5PSJu b25lIjtkLmlubmVySFRNTD0iICAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhy ZWY9Jy9hJyBzdHlsZT0nY29sb3I6cmVkO2Zsb2F0OmxlZnQ7b3BhY2l0eTouNTU7 Jz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiI7CnZhciBlPWQuZ2V0RWxl bWVudHNCeVRhZ05hbWUoIioiKSxqPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEi KVswXTtpZighKCFlfHwhZS5sZW5ndGh8fCFqKSl7Yy5zdXBwb3J0PXtsZWFkaW5n V2hpdGVzcGFjZTpkLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0zLHRib2R5OiFkLmdl dEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLmxlbmd0aCxodG1sU2VyaWFsaXpl OiEhZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCxzdHlsZTov cmVkLy50ZXN0KGouZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSxocmVmTm9ybWFsaXpl ZDpqLmdldEF0dHJpYnV0ZSgiaHJlZiIpPT09Ii9hIixvcGFjaXR5Oi9eMC41NSQv LnRlc3Qoai5zdHlsZS5vcGFjaXR5KSxjc3NGbG9hdDohIWouc3R5bGUuY3NzRmxv YXQsY2hlY2tPbjpkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBdLnZh bHVlPT09Im9uIixvcHRTZWxlY3RlZDpzLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIp LmFwcGVuZENoaWxkKHMuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLnNlbGVjdGVk LApwYXJlbnROb2RlOmQucmVtb3ZlQ2hpbGQoZC5hcHBlbmRDaGlsZChzLmNyZWF0 ZUVsZW1lbnQoImRpdiIpKSkucGFyZW50Tm9kZT09PW51bGwsZGVsZXRlRXhwYW5k bzp0cnVlLGNoZWNrQ2xvbmU6ZmFsc2Usc2NyaXB0RXZhbDpmYWxzZSxub0Nsb25l RXZlbnQ6dHJ1ZSxib3hNb2RlbDpudWxsfTtiLnR5cGU9InRleHQvamF2YXNjcmlw dCI7dHJ5e2IuYXBwZW5kQ2hpbGQocy5jcmVhdGVUZXh0Tm9kZSgid2luZG93LiIr ZisiPTE7IikpfWNhdGNoKGkpe31hLmluc2VydEJlZm9yZShiLGEuZmlyc3RDaGls ZCk7aWYoQVtmXSl7Yy5zdXBwb3J0LnNjcmlwdEV2YWw9dHJ1ZTtkZWxldGUgQVtm XX10cnl7ZGVsZXRlIGIudGVzdH1jYXRjaChvKXtjLnN1cHBvcnQuZGVsZXRlRXhw YW5kbz1mYWxzZX1hLnJlbW92ZUNoaWxkKGIpO2lmKGQuYXR0YWNoRXZlbnQmJmQu ZmlyZUV2ZW50KXtkLmF0dGFjaEV2ZW50KCJvbmNsaWNrIixmdW5jdGlvbiBrKCl7 Yy5zdXBwb3J0Lm5vQ2xvbmVFdmVudD0KZmFsc2U7ZC5kZXRhY2hFdmVudCgib25j bGljayIsayl9KTtkLmNsb25lTm9kZSh0cnVlKS5maXJlRXZlbnQoIm9uY2xpY2si KX1kPXMuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZC5pbm5lckhUTUw9IjxpbnB1dCB0 eXBlPSdyYWRpbycgbmFtZT0ncmFkaW90ZXN0JyBjaGVja2VkPSdjaGVja2VkJy8+ IjthPXMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2EuYXBwZW5kQ2hpbGQoZC5m aXJzdENoaWxkKTtjLnN1cHBvcnQuY2hlY2tDbG9uZT1hLmNsb25lTm9kZSh0cnVl KS5jbG9uZU5vZGUodHJ1ZSkubGFzdENoaWxkLmNoZWNrZWQ7YyhmdW5jdGlvbigp e3ZhciBrPXMuY3JlYXRlRWxlbWVudCgiZGl2Iik7ay5zdHlsZS53aWR0aD1rLnN0 eWxlLnBhZGRpbmdMZWZ0PSIxcHgiO3MuYm9keS5hcHBlbmRDaGlsZChrKTtjLmJv eE1vZGVsPWMuc3VwcG9ydC5ib3hNb2RlbD1rLm9mZnNldFdpZHRoPT09MjtzLmJv ZHkucmVtb3ZlQ2hpbGQoaykuc3R5bGUuZGlzcGxheT0ibm9uZSJ9KTthPWZ1bmN0 aW9uKGspe3ZhciBuPQpzLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2s9Im9uIitrO3Zh ciByPWsgaW4gbjtpZighcil7bi5zZXRBdHRyaWJ1dGUoaywicmV0dXJuOyIpO3I9 dHlwZW9mIG5ba109PT0iZnVuY3Rpb24ifXJldHVybiByfTtjLnN1cHBvcnQuc3Vi bWl0QnViYmxlcz1hKCJzdWJtaXQiKTtjLnN1cHBvcnQuY2hhbmdlQnViYmxlcz1h KCJjaGFuZ2UiKTthPWI9ZD1lPWo9bnVsbH19KSgpO2MucHJvcHM9eyJmb3IiOiJo dG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUiLHJlYWRvbmx5OiJyZWFkT25seSIs bWF4bGVuZ3RoOiJtYXhMZW5ndGgiLGNlbGxzcGFjaW5nOiJjZWxsU3BhY2luZyIs cm93c3Bhbjoicm93U3BhbiIsY29sc3BhbjoiY29sU3BhbiIsdGFiaW5kZXg6InRh YkluZGV4Iix1c2VtYXA6InVzZU1hcCIsZnJhbWVib3JkZXI6ImZyYW1lQm9yZGVy In07dmFyIEc9ImpRdWVyeSIrSigpLFlhPTAsemE9e307Yy5leHRlbmQoe2NhY2hl Ont9LGV4cGFuZG86Ryxub0RhdGE6e2VtYmVkOnRydWUsb2JqZWN0OnRydWUsCmFw cGxldDp0cnVlfSxkYXRhOmZ1bmN0aW9uKGEsYixkKXtpZighKGEubm9kZU5hbWUm JmMubm9EYXRhW2Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pKXthPWE9PUE/emE6 YTt2YXIgZj1hW0ddLGU9Yy5jYWNoZTtpZighZiYmdHlwZW9mIGI9PT0ic3RyaW5n IiYmZD09PXcpcmV0dXJuIG51bGw7Znx8KGY9KytZYSk7aWYodHlwZW9mIGI9PT0i b2JqZWN0Iil7YVtHXT1mO2VbZl09Yy5leHRlbmQodHJ1ZSx7fSxiKX1lbHNlIGlm KCFlW2ZdKXthW0ddPWY7ZVtmXT17fX1hPWVbZl07aWYoZCE9PXcpYVtiXT1kO3Jl dHVybiB0eXBlb2YgYj09PSJzdHJpbmciP2FbYl06YX19LHJlbW92ZURhdGE6ZnVu Y3Rpb24oYSxiKXtpZighKGEubm9kZU5hbWUmJmMubm9EYXRhW2Eubm9kZU5hbWUu dG9Mb3dlckNhc2UoKV0pKXthPWE9PUE/emE6YTt2YXIgZD1hW0ddLGY9Yy5jYWNo ZSxlPWZbZF07aWYoYil7aWYoZSl7ZGVsZXRlIGVbYl07Yy5pc0VtcHR5T2JqZWN0 KGUpJiZjLnJlbW92ZURhdGEoYSl9fWVsc2V7aWYoYy5zdXBwb3J0LmRlbGV0ZUV4 cGFuZG8pZGVsZXRlIGFbYy5leHBhbmRvXTsKZWxzZSBhLnJlbW92ZUF0dHJpYnV0 ZSYmYS5yZW1vdmVBdHRyaWJ1dGUoYy5leHBhbmRvKTtkZWxldGUgZltkXX19fX0p O2MuZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGEsYil7aWYodHlwZW9mIGE9PT0i dW5kZWZpbmVkIiYmdGhpcy5sZW5ndGgpcmV0dXJuIGMuZGF0YSh0aGlzWzBdKTtl bHNlIGlmKHR5cGVvZiBhPT09Im9iamVjdCIpcmV0dXJuIHRoaXMuZWFjaChmdW5j dGlvbigpe2MuZGF0YSh0aGlzLGEpfSk7dmFyIGQ9YS5zcGxpdCgiLiIpO2RbMV09 ZFsxXT8iLiIrZFsxXToiIjtpZihiPT09dyl7dmFyIGY9dGhpcy50cmlnZ2VySGFu ZGxlcigiZ2V0RGF0YSIrZFsxXSsiISIsW2RbMF1dKTtpZihmPT09dyYmdGhpcy5s ZW5ndGgpZj1jLmRhdGEodGhpc1swXSxhKTtyZXR1cm4gZj09PXcmJmRbMV0/dGhp cy5kYXRhKGRbMF0pOmZ9ZWxzZSByZXR1cm4gdGhpcy50cmlnZ2VyKCJzZXREYXRh IitkWzFdKyIhIixbZFswXSxiXSkuZWFjaChmdW5jdGlvbigpe2MuZGF0YSh0aGlz LAphLGIpfSl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFj aChmdW5jdGlvbigpe2MucmVtb3ZlRGF0YSh0aGlzLGEpfSl9fSk7Yy5leHRlbmQo e3F1ZXVlOmZ1bmN0aW9uKGEsYixkKXtpZihhKXtiPShifHwiZngiKSsicXVldWUi O3ZhciBmPWMuZGF0YShhLGIpO2lmKCFkKXJldHVybiBmfHxbXTtpZighZnx8Yy5p c0FycmF5KGQpKWY9Yy5kYXRhKGEsYixjLm1ha2VBcnJheShkKSk7ZWxzZSBmLnB1 c2goZCk7cmV0dXJuIGZ9fSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngi O3ZhciBkPWMucXVldWUoYSxiKSxmPWQuc2hpZnQoKTtpZihmPT09ImlucHJvZ3Jl c3MiKWY9ZC5zaGlmdCgpO2lmKGYpe2I9PT0iZngiJiZkLnVuc2hpZnQoImlucHJv Z3Jlc3MiKTtmLmNhbGwoYSxmdW5jdGlvbigpe2MuZGVxdWV1ZShhLGIpfSl9fX0p O2MuZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBhIT09 InN0cmluZyIpe2I9YTthPSJmeCJ9aWYoYj09PQp3KXJldHVybiBjLnF1ZXVlKHRo aXNbMF0sYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWMucXVl dWUodGhpcyxhLGIpO2E9PT0iZngiJiZkWzBdIT09ImlucHJvZ3Jlc3MiJiZjLmRl cXVldWUodGhpcyxhKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlz LmVhY2goZnVuY3Rpb24oKXtjLmRlcXVldWUodGhpcyxhKX0pfSxkZWxheTpmdW5j dGlvbihhLGIpe2E9Yy5meD9jLmZ4LnNwZWVkc1thXXx8YTphO2I9Ynx8ImZ4Ijty ZXR1cm4gdGhpcy5xdWV1ZShiLGZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztzZXRUaW1l b3V0KGZ1bmN0aW9uKCl7Yy5kZXF1ZXVlKGQsYil9LGEpfSl9LGNsZWFyUXVldWU6 ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucXVldWUoYXx8ImZ4IixbXSl9fSk7dmFy IEFhPS9bXG5cdF0vZyxjYT0vXHMrLyxaYT0vXHIvZywkYT0vaHJlZnxzcmN8c3R5 bGUvLGFiPS8oYnV0dG9ufGlucHV0KS9pLGJiPS8oYnV0dG9ufGlucHV0fG9iamVj dHxzZWxlY3R8dGV4dGFyZWEpL2ksCmNiPS9eKGF8YXJlYSkkL2ksQmE9L3JhZGlv fGNoZWNrYm94LztjLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIpe3JldHVy biBYKHRoaXMsYSxiLHRydWUsYy5hdHRyKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihh KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Yy5hdHRyKHRoaXMsYSwiIik7 dGhpcy5ub2RlVHlwZT09PTEmJnRoaXMucmVtb3ZlQXR0cmlidXRlKGEpfSl9LGFk ZENsYXNzOmZ1bmN0aW9uKGEpe2lmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhp cy5lYWNoKGZ1bmN0aW9uKG4pe3ZhciByPWModGhpcyk7ci5hZGRDbGFzcyhhLmNh bGwodGhpcyxuLHIuYXR0cigiY2xhc3MiKSkpfSk7aWYoYSYmdHlwZW9mIGE9PT0i c3RyaW5nIilmb3IodmFyIGI9KGF8fCIiKS5zcGxpdChjYSksZD0wLGY9dGhpcy5s ZW5ndGg7ZDxmO2QrKyl7dmFyIGU9dGhpc1tkXTtpZihlLm5vZGVUeXBlPT09MSlp ZihlLmNsYXNzTmFtZSl7Zm9yKHZhciBqPSIgIitlLmNsYXNzTmFtZSsiICIsCmk9 ZS5jbGFzc05hbWUsbz0wLGs9Yi5sZW5ndGg7bzxrO28rKylpZihqLmluZGV4T2Yo IiAiK2Jbb10rIiAiKTwwKWkrPSIgIitiW29dO2UuY2xhc3NOYW1lPWMudHJpbShp KX1lbHNlIGUuY2xhc3NOYW1lPWF9cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1 bmN0aW9uKGEpe2lmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1 bmN0aW9uKGspe3ZhciBuPWModGhpcyk7bi5yZW1vdmVDbGFzcyhhLmNhbGwodGhp cyxrLG4uYXR0cigiY2xhc3MiKSkpfSk7aWYoYSYmdHlwZW9mIGE9PT0ic3RyaW5n Inx8YT09PXcpZm9yKHZhciBiPShhfHwiIikuc3BsaXQoY2EpLGQ9MCxmPXRoaXMu bGVuZ3RoO2Q8ZjtkKyspe3ZhciBlPXRoaXNbZF07aWYoZS5ub2RlVHlwZT09PTEm JmUuY2xhc3NOYW1lKWlmKGEpe2Zvcih2YXIgaj0oIiAiK2UuY2xhc3NOYW1lKyIg IikucmVwbGFjZShBYSwiICIpLGk9MCxvPWIubGVuZ3RoO2k8bztpKyspaj1qLnJl cGxhY2UoIiAiK2JbaV0rIiAiLAoiICIpO2UuY2xhc3NOYW1lPWMudHJpbShqKX1l bHNlIGUuY2xhc3NOYW1lPSIifXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5j dGlvbihhLGIpe3ZhciBkPXR5cGVvZiBhLGY9dHlwZW9mIGI9PT0iYm9vbGVhbiI7 aWYoYy5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7 dmFyIGo9Yyh0aGlzKTtqLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGUsai5hdHRy KCJjbGFzcyIpLGIpLGIpfSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lm KGQ9PT0ic3RyaW5nIilmb3IodmFyIGUsaj0wLGk9Yyh0aGlzKSxvPWIsaz1hLnNw bGl0KGNhKTtlPWtbaisrXTspe289Zj9vOiFpLmhhc0NsYXNzKGUpO2lbbz8iYWRk Q2xhc3MiOiJyZW1vdmVDbGFzcyJdKGUpfWVsc2UgaWYoZD09PSJ1bmRlZmluZWQi fHxkPT09ImJvb2xlYW4iKXt0aGlzLmNsYXNzTmFtZSYmYy5kYXRhKHRoaXMsIl9f Y2xhc3NOYW1lX18iLHRoaXMuY2xhc3NOYW1lKTt0aGlzLmNsYXNzTmFtZT0KdGhp cy5jbGFzc05hbWV8fGE9PT1mYWxzZT8iIjpjLmRhdGEodGhpcywiX19jbGFzc05h bWVfXyIpfHwiIn19KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7YT0iICIrYSsiICI7 Zm9yKHZhciBiPTAsZD10aGlzLmxlbmd0aDtiPGQ7YisrKWlmKCgiICIrdGhpc1ti XS5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKEFhLCIgIikuaW5kZXhPZihhKT4tMSly ZXR1cm4gdHJ1ZTtyZXR1cm4gZmFsc2V9LHZhbDpmdW5jdGlvbihhKXtpZihhPT09 dyl7dmFyIGI9dGhpc1swXTtpZihiKXtpZihjLm5vZGVOYW1lKGIsIm9wdGlvbiIp KXJldHVybihiLmF0dHJpYnV0ZXMudmFsdWV8fHt9KS5zcGVjaWZpZWQ/Yi52YWx1 ZTpiLnRleHQ7aWYoYy5ub2RlTmFtZShiLCJzZWxlY3QiKSl7dmFyIGQ9Yi5zZWxl Y3RlZEluZGV4LGY9W10sZT1iLm9wdGlvbnM7Yj1iLnR5cGU9PT0ic2VsZWN0LW9u ZSI7aWYoZDwwKXJldHVybiBudWxsO3ZhciBqPWI/ZDowO2ZvcihkPWI/ZCsxOmUu bGVuZ3RoO2o8ZDtqKyspe3ZhciBpPQplW2pdO2lmKGkuc2VsZWN0ZWQpe2E9Yyhp KS52YWwoKTtpZihiKXJldHVybiBhO2YucHVzaChhKX19cmV0dXJuIGZ9aWYoQmEu dGVzdChiLnR5cGUpJiYhYy5zdXBwb3J0LmNoZWNrT24pcmV0dXJuIGIuZ2V0QXR0 cmlidXRlKCJ2YWx1ZSIpPT09bnVsbD8ib24iOmIudmFsdWU7cmV0dXJuKGIudmFs dWV8fCIiKS5yZXBsYWNlKFphLCIiKX1yZXR1cm4gd312YXIgbz1jLmlzRnVuY3Rp b24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihrKXt2YXIgbj1jKHRoaXMp LHI9YTtpZih0aGlzLm5vZGVUeXBlPT09MSl7aWYobylyPWEuY2FsbCh0aGlzLGss bi52YWwoKSk7aWYodHlwZW9mIHI9PT0ibnVtYmVyIilyKz0iIjtpZihjLmlzQXJy YXkocikmJkJhLnRlc3QodGhpcy50eXBlKSl0aGlzLmNoZWNrZWQ9Yy5pbkFycmF5 KG4udmFsKCkscik+PTA7ZWxzZSBpZihjLm5vZGVOYW1lKHRoaXMsInNlbGVjdCIp KXt2YXIgdT1jLm1ha2VBcnJheShyKTtjKCJvcHRpb24iLHRoaXMpLmVhY2goZnVu Y3Rpb24oKXt0aGlzLnNlbGVjdGVkPQpjLmluQXJyYXkoYyh0aGlzKS52YWwoKSx1 KT49MH0pO2lmKCF1Lmxlbmd0aCl0aGlzLnNlbGVjdGVkSW5kZXg9LTF9ZWxzZSB0 aGlzLnZhbHVlPXJ9fSl9fSk7Yy5leHRlbmQoe2F0dHJGbjp7dmFsOnRydWUsY3Nz OnRydWUsaHRtbDp0cnVlLHRleHQ6dHJ1ZSxkYXRhOnRydWUsd2lkdGg6dHJ1ZSxo ZWlnaHQ6dHJ1ZSxvZmZzZXQ6dHJ1ZX0sYXR0cjpmdW5jdGlvbihhLGIsZCxmKXtp ZighYXx8YS5ub2RlVHlwZT09PTN8fGEubm9kZVR5cGU9PT04KXJldHVybiB3O2lm KGYmJmIgaW4gYy5hdHRyRm4pcmV0dXJuIGMoYSlbYl0oZCk7Zj1hLm5vZGVUeXBl IT09MXx8IWMuaXNYTUxEb2MoYSk7dmFyIGU9ZCE9PXc7Yj1mJiZjLnByb3BzW2Jd fHxiO2lmKGEubm9kZVR5cGU9PT0xKXt2YXIgaj0kYS50ZXN0KGIpO2lmKGIgaW4g YSYmZiYmIWope2lmKGUpe2I9PT0idHlwZSImJmFiLnRlc3QoYS5ub2RlTmFtZSkm JmEucGFyZW50Tm9kZSYmYy5lcnJvcigidHlwZSBwcm9wZXJ0eSBjYW4ndCBiZSBj aGFuZ2VkIik7CmFbYl09ZH1pZihjLm5vZGVOYW1lKGEsImZvcm0iKSYmYS5nZXRB dHRyaWJ1dGVOb2RlKGIpKXJldHVybiBhLmdldEF0dHJpYnV0ZU5vZGUoYikubm9k ZVZhbHVlO2lmKGI9PT0idGFiSW5kZXgiKXJldHVybihiPWEuZ2V0QXR0cmlidXRl Tm9kZSgidGFiSW5kZXgiKSkmJmIuc3BlY2lmaWVkP2IudmFsdWU6YmIudGVzdChh Lm5vZGVOYW1lKXx8Y2IudGVzdChhLm5vZGVOYW1lKSYmYS5ocmVmPzA6dztyZXR1 cm4gYVtiXX1pZighYy5zdXBwb3J0LnN0eWxlJiZmJiZiPT09InN0eWxlIil7aWYo ZSlhLnN0eWxlLmNzc1RleHQ9IiIrZDtyZXR1cm4gYS5zdHlsZS5jc3NUZXh0fWUm JmEuc2V0QXR0cmlidXRlKGIsIiIrZCk7YT0hYy5zdXBwb3J0LmhyZWZOb3JtYWxp emVkJiZmJiZqP2EuZ2V0QXR0cmlidXRlKGIsMik6YS5nZXRBdHRyaWJ1dGUoYik7 cmV0dXJuIGE9PT1udWxsP3c6YX1yZXR1cm4gYy5zdHlsZShhLGIsZCl9fSk7dmFy IE89L1wuKC4qKSQvLGRiPWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoL1te XHdcc1wuXHxgXS9nLApmdW5jdGlvbihiKXtyZXR1cm4iXFwiK2J9KX07Yy5ldmVu dD17YWRkOmZ1bmN0aW9uKGEsYixkLGYpe2lmKCEoYS5ub2RlVHlwZT09PTN8fGEu bm9kZVR5cGU9PT04KSl7aWYoYS5zZXRJbnRlcnZhbCYmYSE9PUEmJiFhLmZyYW1l RWxlbWVudClhPUE7dmFyIGUsajtpZihkLmhhbmRsZXIpe2U9ZDtkPWUuaGFuZGxl cn1pZighZC5ndWlkKWQuZ3VpZD1jLmd1aWQrKztpZihqPWMuZGF0YShhKSl7dmFy IGk9ai5ldmVudHM9ai5ldmVudHN8fHt9LG89ai5oYW5kbGU7aWYoIW8pai5oYW5k bGU9bz1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgYyE9PSJ1bmRlZmluZWQiJiYh Yy5ldmVudC50cmlnZ2VyZWQ/Yy5ldmVudC5oYW5kbGUuYXBwbHkoby5lbGVtLGFy Z3VtZW50cyk6d307by5lbGVtPWE7Yj1iLnNwbGl0KCIgIik7Zm9yKHZhciBrLG49 MCxyO2s9YltuKytdOyl7aj1lP2MuZXh0ZW5kKHt9LGUpOntoYW5kbGVyOmQsZGF0 YTpmfTtpZihrLmluZGV4T2YoIi4iKT4tMSl7cj1rLnNwbGl0KCIuIik7Cms9ci5z aGlmdCgpO2oubmFtZXNwYWNlPXIuc2xpY2UoMCkuc29ydCgpLmpvaW4oIi4iKX1l bHNle3I9W107ai5uYW1lc3BhY2U9IiJ9ai50eXBlPWs7ai5ndWlkPWQuZ3VpZDt2 YXIgdT1pW2tdLHo9Yy5ldmVudC5zcGVjaWFsW2tdfHx7fTtpZighdSl7dT1pW2td PVtdO2lmKCF6LnNldHVwfHx6LnNldHVwLmNhbGwoYSxmLHIsbyk9PT1mYWxzZSlp ZihhLmFkZEV2ZW50TGlzdGVuZXIpYS5hZGRFdmVudExpc3RlbmVyKGssbyxmYWxz ZSk7ZWxzZSBhLmF0dGFjaEV2ZW50JiZhLmF0dGFjaEV2ZW50KCJvbiIrayxvKX1p Zih6LmFkZCl7ei5hZGQuY2FsbChhLGopO2lmKCFqLmhhbmRsZXIuZ3VpZClqLmhh bmRsZXIuZ3VpZD1kLmd1aWR9dS5wdXNoKGopO2MuZXZlbnQuZ2xvYmFsW2tdPXRy dWV9YT1udWxsfX19LGdsb2JhbDp7fSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGQsZil7 aWYoIShhLm5vZGVUeXBlPT09M3x8YS5ub2RlVHlwZT09PTgpKXt2YXIgZSxqPTAs aSxvLGssbixyLHUsej1jLmRhdGEoYSksCkM9eiYmei5ldmVudHM7aWYoeiYmQyl7 aWYoYiYmYi50eXBlKXtkPWIuaGFuZGxlcjtiPWIudHlwZX1pZighYnx8dHlwZW9m IGI9PT0ic3RyaW5nIiYmYi5jaGFyQXQoMCk9PT0iLiIpe2I9Ynx8IiI7Zm9yKGUg aW4gQyljLmV2ZW50LnJlbW92ZShhLGUrYil9ZWxzZXtmb3IoYj1iLnNwbGl0KCIg Iik7ZT1iW2orK107KXtuPWU7aT1lLmluZGV4T2YoIi4iKTwwO289W107aWYoIWkp e289ZS5zcGxpdCgiLiIpO2U9by5zaGlmdCgpO2s9bmV3IFJlZ0V4cCgiKF58XFwu KSIrYy5tYXAoby5zbGljZSgwKS5zb3J0KCksZGIpLmpvaW4oIlxcLig/Oi4qXFwu KT8iKSsiKFxcLnwkKSIpfWlmKHI9Q1tlXSlpZihkKXtuPWMuZXZlbnQuc3BlY2lh bFtlXXx8e307Zm9yKEI9Znx8MDtCPHIubGVuZ3RoO0IrKyl7dT1yW0JdO2lmKGQu Z3VpZD09PXUuZ3VpZCl7aWYoaXx8ay50ZXN0KHUubmFtZXNwYWNlKSl7Zj09bnVs bCYmci5zcGxpY2UoQi0tLDEpO24ucmVtb3ZlJiZuLnJlbW92ZS5jYWxsKGEsdSl9 aWYoZiE9Cm51bGwpYnJlYWt9fWlmKHIubGVuZ3RoPT09MHx8ZiE9bnVsbCYmci5s ZW5ndGg9PT0xKXtpZighbi50ZWFyZG93bnx8bi50ZWFyZG93bi5jYWxsKGEsbyk9 PT1mYWxzZSlDYShhLGUsei5oYW5kbGUpO2RlbGV0ZSBDW2VdfX1lbHNlIGZvcih2 YXIgQj0wO0I8ci5sZW5ndGg7QisrKXt1PXJbQl07aWYoaXx8ay50ZXN0KHUubmFt ZXNwYWNlKSl7Yy5ldmVudC5yZW1vdmUoYSxuLHUuaGFuZGxlcixCKTtyLnNwbGlj ZShCLS0sMSl9fX1pZihjLmlzRW1wdHlPYmplY3QoQykpe2lmKGI9ei5oYW5kbGUp Yi5lbGVtPW51bGw7ZGVsZXRlIHouZXZlbnRzO2RlbGV0ZSB6LmhhbmRsZTtjLmlz RW1wdHlPYmplY3QoeikmJmMucmVtb3ZlRGF0YShhKX19fX19LHRyaWdnZXI6ZnVu Y3Rpb24oYSxiLGQsZil7dmFyIGU9YS50eXBlfHxhO2lmKCFmKXthPXR5cGVvZiBh PT09Im9iamVjdCI/YVtHXT9hOmMuZXh0ZW5kKGMuRXZlbnQoZSksYSk6Yy5FdmVu dChlKTtpZihlLmluZGV4T2YoIiEiKT49MCl7YS50eXBlPQplPWUuc2xpY2UoMCwt MSk7YS5leGNsdXNpdmU9dHJ1ZX1pZighZCl7YS5zdG9wUHJvcGFnYXRpb24oKTtj LmV2ZW50Lmdsb2JhbFtlXSYmYy5lYWNoKGMuY2FjaGUsZnVuY3Rpb24oKXt0aGlz LmV2ZW50cyYmdGhpcy5ldmVudHNbZV0mJmMuZXZlbnQudHJpZ2dlcihhLGIsdGhp cy5oYW5kbGUuZWxlbSl9KX1pZighZHx8ZC5ub2RlVHlwZT09PTN8fGQubm9kZVR5 cGU9PT04KXJldHVybiB3O2EucmVzdWx0PXc7YS50YXJnZXQ9ZDtiPWMubWFrZUFy cmF5KGIpO2IudW5zaGlmdChhKX1hLmN1cnJlbnRUYXJnZXQ9ZDsoZj1jLmRhdGEo ZCwiaGFuZGxlIikpJiZmLmFwcGx5KGQsYik7Zj1kLnBhcmVudE5vZGV8fGQub3du ZXJEb2N1bWVudDt0cnl7aWYoIShkJiZkLm5vZGVOYW1lJiZjLm5vRGF0YVtkLm5v ZGVOYW1lLnRvTG93ZXJDYXNlKCldKSlpZihkWyJvbiIrZV0mJmRbIm9uIitlXS5h cHBseShkLGIpPT09ZmFsc2UpYS5yZXN1bHQ9ZmFsc2V9Y2F0Y2goail7fWlmKCFh LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJgpmKWMuZXZlbnQudHJpZ2dlcihhLGIs Zix0cnVlKTtlbHNlIGlmKCFhLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtmPWEudGFy Z2V0O3ZhciBpLG89Yy5ub2RlTmFtZShmLCJhIikmJmU9PT0iY2xpY2siLGs9Yy5l dmVudC5zcGVjaWFsW2VdfHx7fTtpZigoIWsuX2RlZmF1bHR8fGsuX2RlZmF1bHQu Y2FsbChkLGEpPT09ZmFsc2UpJiYhbyYmIShmJiZmLm5vZGVOYW1lJiZjLm5vRGF0 YVtmLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSl7dHJ5e2lmKGZbZV0pe2lmKGk9 Zlsib24iK2VdKWZbIm9uIitlXT1udWxsO2MuZXZlbnQudHJpZ2dlcmVkPXRydWU7 ZltlXSgpfX1jYXRjaChuKXt9aWYoaSlmWyJvbiIrZV09aTtjLmV2ZW50LnRyaWdn ZXJlZD1mYWxzZX19fSxoYW5kbGU6ZnVuY3Rpb24oYSl7dmFyIGIsZCxmLGU7YT1h cmd1bWVudHNbMF09Yy5ldmVudC5maXgoYXx8QS5ldmVudCk7YS5jdXJyZW50VGFy Z2V0PXRoaXM7Yj1hLnR5cGUuaW5kZXhPZigiLiIpPDAmJiFhLmV4Y2x1c2l2ZTsK aWYoIWIpe2Q9YS50eXBlLnNwbGl0KCIuIik7YS50eXBlPWQuc2hpZnQoKTtmPW5l dyBSZWdFeHAoIihefFxcLikiK2Quc2xpY2UoMCkuc29ydCgpLmpvaW4oIlxcLig/ Oi4qXFwuKT8iKSsiKFxcLnwkKSIpfWU9Yy5kYXRhKHRoaXMsImV2ZW50cyIpO2Q9 ZVthLnR5cGVdO2lmKGUmJmQpe2Q9ZC5zbGljZSgwKTtlPTA7Zm9yKHZhciBqPWQu bGVuZ3RoO2U8ajtlKyspe3ZhciBpPWRbZV07aWYoYnx8Zi50ZXN0KGkubmFtZXNw YWNlKSl7YS5oYW5kbGVyPWkuaGFuZGxlcjthLmRhdGE9aS5kYXRhO2EuaGFuZGxl T2JqPWk7aT1pLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKGkhPT13 KXthLnJlc3VsdD1pO2lmKGk9PT1mYWxzZSl7YS5wcmV2ZW50RGVmYXVsdCgpO2Eu c3RvcFByb3BhZ2F0aW9uKCl9fWlmKGEuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0 b3BwZWQoKSlicmVha319fXJldHVybiBhLnJlc3VsdH0scHJvcHM6ImFsdEtleSBh dHRyQ2hhbmdlIGF0dHJOYW1lIGJ1YmJsZXMgYnV0dG9uIGNhbmNlbGFibGUgY2hh ckNvZGUgY2xpZW50WCBjbGllbnRZIGN0cmxLZXkgY3VycmVudFRhcmdldCBkYXRh IGRldGFpbCBldmVudFBoYXNlIGZyb21FbGVtZW50IGhhbmRsZXIga2V5Q29kZSBs YXllclggbGF5ZXJZIG1ldGFLZXkgbmV3VmFsdWUgb2Zmc2V0WCBvZmZzZXRZIG9y aWdpbmFsVGFyZ2V0IHBhZ2VYIHBhZ2VZIHByZXZWYWx1ZSByZWxhdGVkTm9kZSBy ZWxhdGVkVGFyZ2V0IHNjcmVlblggc2NyZWVuWSBzaGlmdEtleSBzcmNFbGVtZW50 IHRhcmdldCB0b0VsZW1lbnQgdmlldyB3aGVlbERlbHRhIHdoaWNoIi5zcGxpdCgi ICIpLApmaXg6ZnVuY3Rpb24oYSl7aWYoYVtHXSlyZXR1cm4gYTt2YXIgYj1hO2E9 Yy5FdmVudChiKTtmb3IodmFyIGQ9dGhpcy5wcm9wcy5sZW5ndGgsZjtkOyl7Zj10 aGlzLnByb3BzWy0tZF07YVtmXT1iW2ZdfWlmKCFhLnRhcmdldClhLnRhcmdldD1h LnNyY0VsZW1lbnR8fHM7aWYoYS50YXJnZXQubm9kZVR5cGU9PT0zKWEudGFyZ2V0 PWEudGFyZ2V0LnBhcmVudE5vZGU7aWYoIWEucmVsYXRlZFRhcmdldCYmYS5mcm9t RWxlbWVudClhLnJlbGF0ZWRUYXJnZXQ9YS5mcm9tRWxlbWVudD09PWEudGFyZ2V0 P2EudG9FbGVtZW50OmEuZnJvbUVsZW1lbnQ7aWYoYS5wYWdlWD09bnVsbCYmYS5j bGllbnRYIT1udWxsKXtiPXMuZG9jdW1lbnRFbGVtZW50O2Q9cy5ib2R5O2EucGFn ZVg9YS5jbGllbnRYKyhiJiZiLnNjcm9sbExlZnR8fGQmJmQuc2Nyb2xsTGVmdHx8 MCktKGImJmIuY2xpZW50TGVmdHx8ZCYmZC5jbGllbnRMZWZ0fHwwKTthLnBhZ2VZ PWEuY2xpZW50WSsoYiYmYi5zY3JvbGxUb3B8fApkJiZkLnNjcm9sbFRvcHx8MCkt KGImJmIuY2xpZW50VG9wfHxkJiZkLmNsaWVudFRvcHx8MCl9aWYoIWEud2hpY2gm JihhLmNoYXJDb2RlfHxhLmNoYXJDb2RlPT09MD9hLmNoYXJDb2RlOmEua2V5Q29k ZSkpYS53aGljaD1hLmNoYXJDb2RlfHxhLmtleUNvZGU7aWYoIWEubWV0YUtleSYm YS5jdHJsS2V5KWEubWV0YUtleT1hLmN0cmxLZXk7aWYoIWEud2hpY2gmJmEuYnV0 dG9uIT09dylhLndoaWNoPWEuYnV0dG9uJjE/MTphLmJ1dHRvbiYyPzM6YS5idXR0 b24mND8yOjA7cmV0dXJuIGF9LGd1aWQ6MUU4LHByb3h5OmMucHJveHksc3BlY2lh bDp7cmVhZHk6e3NldHVwOmMuYmluZFJlYWR5LHRlYXJkb3duOmMubm9vcH0sbGl2 ZTp7YWRkOmZ1bmN0aW9uKGEpe2MuZXZlbnQuYWRkKHRoaXMsYS5vcmlnVHlwZSxj LmV4dGVuZCh7fSxhLHtoYW5kbGVyOm9hfSkpfSxyZW1vdmU6ZnVuY3Rpb24oYSl7 dmFyIGI9dHJ1ZSxkPWEub3JpZ1R5cGUucmVwbGFjZShPLCIiKTtjLmVhY2goYy5k YXRhKHRoaXMsCiJldmVudHMiKS5saXZlfHxbXSxmdW5jdGlvbigpe2lmKGQ9PT10 aGlzLm9yaWdUeXBlLnJlcGxhY2UoTywiIikpcmV0dXJuIGI9ZmFsc2V9KTtiJiZj LmV2ZW50LnJlbW92ZSh0aGlzLGEub3JpZ1R5cGUsb2EpfX0sYmVmb3JldW5sb2Fk OntzZXR1cDpmdW5jdGlvbihhLGIsZCl7aWYodGhpcy5zZXRJbnRlcnZhbCl0aGlz Lm9uYmVmb3JldW5sb2FkPWQ7cmV0dXJuIGZhbHNlfSx0ZWFyZG93bjpmdW5jdGlv bihhLGIpe2lmKHRoaXMub25iZWZvcmV1bmxvYWQ9PT1iKXRoaXMub25iZWZvcmV1 bmxvYWQ9bnVsbH19fX07dmFyIENhPXMucmVtb3ZlRXZlbnRMaXN0ZW5lcj9mdW5j dGlvbihhLGIsZCl7YS5yZW1vdmVFdmVudExpc3RlbmVyKGIsZCxmYWxzZSl9OmZ1 bmN0aW9uKGEsYixkKXthLmRldGFjaEV2ZW50KCJvbiIrYixkKX07Yy5FdmVudD1m dW5jdGlvbihhKXtpZighdGhpcy5wcmV2ZW50RGVmYXVsdClyZXR1cm4gbmV3IGMu RXZlbnQoYSk7aWYoYSYmYS50eXBlKXt0aGlzLm9yaWdpbmFsRXZlbnQ9CmE7dGhp cy50eXBlPWEudHlwZX1lbHNlIHRoaXMudHlwZT1hO3RoaXMudGltZVN0YW1wPUoo KTt0aGlzW0ddPXRydWV9O2MuRXZlbnQucHJvdG90eXBlPXtwcmV2ZW50RGVmYXVs dDpmdW5jdGlvbigpe3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPVo7dmFyIGE9dGhp cy5vcmlnaW5hbEV2ZW50O2lmKGEpe2EucHJldmVudERlZmF1bHQmJmEucHJldmVu dERlZmF1bHQoKTthLnJldHVyblZhbHVlPWZhbHNlfX0sc3RvcFByb3BhZ2F0aW9u OmZ1bmN0aW9uKCl7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1aO3ZhciBhPXRo aXMub3JpZ2luYWxFdmVudDtpZihhKXthLnN0b3BQcm9wYWdhdGlvbiYmYS5zdG9w UHJvcGFnYXRpb24oKTthLmNhbmNlbEJ1YmJsZT10cnVlfX0sc3RvcEltbWVkaWF0 ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0 aW9uU3RvcHBlZD1aO3RoaXMuc3RvcFByb3BhZ2F0aW9uKCl9LGlzRGVmYXVsdFBy ZXZlbnRlZDpZLGlzUHJvcGFnYXRpb25TdG9wcGVkOlksCmlzSW1tZWRpYXRlUHJv cGFnYXRpb25TdG9wcGVkOll9O3ZhciBEYT1mdW5jdGlvbihhKXt2YXIgYj1hLnJl bGF0ZWRUYXJnZXQ7dHJ5e2Zvcig7YiYmYiE9PXRoaXM7KWI9Yi5wYXJlbnROb2Rl O2lmKGIhPT10aGlzKXthLnR5cGU9YS5kYXRhO2MuZXZlbnQuaGFuZGxlLmFwcGx5 KHRoaXMsYXJndW1lbnRzKX19Y2F0Y2goZCl7fX0sRWE9ZnVuY3Rpb24oYSl7YS50 eXBlPWEuZGF0YTtjLmV2ZW50LmhhbmRsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9 O2MuZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3Vz ZW91dCJ9LGZ1bmN0aW9uKGEsYil7Yy5ldmVudC5zcGVjaWFsW2FdPXtzZXR1cDpm dW5jdGlvbihkKXtjLmV2ZW50LmFkZCh0aGlzLGIsZCYmZC5zZWxlY3Rvcj9FYTpE YSxhKX0sdGVhcmRvd246ZnVuY3Rpb24oZCl7Yy5ldmVudC5yZW1vdmUodGhpcyxi LGQmJmQuc2VsZWN0b3I/RWE6RGEpfX19KTtpZighYy5zdXBwb3J0LnN1Ym1pdEJ1 YmJsZXMpYy5ldmVudC5zcGVjaWFsLnN1Ym1pdD0Ke3NldHVwOmZ1bmN0aW9uKCl7 aWYodGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09ImZvcm0iKXtjLmV2ZW50 LmFkZCh0aGlzLCJjbGljay5zcGVjaWFsU3VibWl0IixmdW5jdGlvbihhKXt2YXIg Yj1hLnRhcmdldCxkPWIudHlwZTtpZigoZD09PSJzdWJtaXQifHxkPT09ImltYWdl IikmJmMoYikuY2xvc2VzdCgiZm9ybSIpLmxlbmd0aClyZXR1cm4gbmEoInN1Ym1p dCIsdGhpcyxhcmd1bWVudHMpfSk7Yy5ldmVudC5hZGQodGhpcywia2V5cHJlc3Mu c3BlY2lhbFN1Ym1pdCIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQsZD1iLnR5 cGU7aWYoKGQ9PT0idGV4dCJ8fGQ9PT0icGFzc3dvcmQiKSYmYyhiKS5jbG9zZXN0 KCJmb3JtIikubGVuZ3RoJiZhLmtleUNvZGU9PT0xMylyZXR1cm4gbmEoInN1Ym1p dCIsdGhpcyxhcmd1bWVudHMpfSl9ZWxzZSByZXR1cm4gZmFsc2V9LHRlYXJkb3du OmZ1bmN0aW9uKCl7Yy5ldmVudC5yZW1vdmUodGhpcywiLnNwZWNpYWxTdWJtaXQi KX19OwppZighYy5zdXBwb3J0LmNoYW5nZUJ1YmJsZXMpe3ZhciBkYT0vdGV4dGFy ZWF8aW5wdXR8c2VsZWN0L2ksZWEsRmE9ZnVuY3Rpb24oYSl7dmFyIGI9YS50eXBl LGQ9YS52YWx1ZTtpZihiPT09InJhZGlvInx8Yj09PSJjaGVja2JveCIpZD1hLmNo ZWNrZWQ7ZWxzZSBpZihiPT09InNlbGVjdC1tdWx0aXBsZSIpZD1hLnNlbGVjdGVk SW5kZXg+LTE/Yy5tYXAoYS5vcHRpb25zLGZ1bmN0aW9uKGYpe3JldHVybiBmLnNl bGVjdGVkfSkuam9pbigiLSIpOiIiO2Vsc2UgaWYoYS5ub2RlTmFtZS50b0xvd2Vy Q2FzZSgpPT09InNlbGVjdCIpZD1hLnNlbGVjdGVkSW5kZXg7cmV0dXJuIGR9LGZh PWZ1bmN0aW9uKGEsYil7dmFyIGQ9YS50YXJnZXQsZixlO2lmKCEoIWRhLnRlc3Qo ZC5ub2RlTmFtZSl8fGQucmVhZE9ubHkpKXtmPWMuZGF0YShkLCJfY2hhbmdlX2Rh dGEiKTtlPUZhKGQpO2lmKGEudHlwZSE9PSJmb2N1c291dCJ8fGQudHlwZSE9PSJy YWRpbyIpYy5kYXRhKGQsIl9jaGFuZ2VfZGF0YSIsCmUpO2lmKCEoZj09PXd8fGU9 PT1mKSlpZihmIT1udWxsfHxlKXthLnR5cGU9ImNoYW5nZSI7cmV0dXJuIGMuZXZl bnQudHJpZ2dlcihhLGIsZCl9fX07Yy5ldmVudC5zcGVjaWFsLmNoYW5nZT17Zmls dGVyczp7Zm9jdXNvdXQ6ZmEsY2xpY2s6ZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJn ZXQsZD1iLnR5cGU7aWYoZD09PSJyYWRpbyJ8fGQ9PT0iY2hlY2tib3gifHxiLm5v ZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0ic2VsZWN0IilyZXR1cm4gZmEuY2FsbCh0 aGlzLGEpfSxrZXlkb3duOmZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0LGQ9Yi50 eXBlO2lmKGEua2V5Q29kZT09PTEzJiZiLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkh PT0idGV4dGFyZWEifHxhLmtleUNvZGU9PT0zMiYmKGQ9PT0iY2hlY2tib3gifHxk PT09InJhZGlvIil8fGQ9PT0ic2VsZWN0LW11bHRpcGxlIilyZXR1cm4gZmEuY2Fs bCh0aGlzLGEpfSxiZWZvcmVhY3RpdmF0ZTpmdW5jdGlvbihhKXthPWEudGFyZ2V0 O2MuZGF0YShhLAoiX2NoYW5nZV9kYXRhIixGYShhKSl9fSxzZXR1cDpmdW5jdGlv bigpe2lmKHRoaXMudHlwZT09PSJmaWxlIilyZXR1cm4gZmFsc2U7Zm9yKHZhciBh IGluIGVhKWMuZXZlbnQuYWRkKHRoaXMsYSsiLnNwZWNpYWxDaGFuZ2UiLGVhW2Fd KTtyZXR1cm4gZGEudGVzdCh0aGlzLm5vZGVOYW1lKX0sdGVhcmRvd246ZnVuY3Rp b24oKXtjLmV2ZW50LnJlbW92ZSh0aGlzLCIuc3BlY2lhbENoYW5nZSIpO3JldHVy biBkYS50ZXN0KHRoaXMubm9kZU5hbWUpfX07ZWE9Yy5ldmVudC5zcGVjaWFsLmNo YW5nZS5maWx0ZXJzfXMuYWRkRXZlbnRMaXN0ZW5lciYmYy5lYWNoKHtmb2N1czoi Zm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9u IGQoZil7Zj1jLmV2ZW50LmZpeChmKTtmLnR5cGU9YjtyZXR1cm4gYy5ldmVudC5o YW5kbGUuY2FsbCh0aGlzLGYpfWMuZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVu Y3Rpb24oKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoYSwKZCx0cnVlKX0sdGVhcmRv d246ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxkLHRydWUp fX19KTtjLmVhY2goWyJiaW5kIiwib25lIl0sZnVuY3Rpb24oYSxiKXtjLmZuW2Jd PWZ1bmN0aW9uKGQsZixlKXtpZih0eXBlb2YgZD09PSJvYmplY3QiKXtmb3IodmFy IGogaW4gZCl0aGlzW2JdKGosZixkW2pdLGUpO3JldHVybiB0aGlzfWlmKGMuaXNG dW5jdGlvbihmKSl7ZT1mO2Y9d312YXIgaT1iPT09Im9uZSI/Yy5wcm94eShlLGZ1 bmN0aW9uKGspe2ModGhpcykudW5iaW5kKGssaSk7cmV0dXJuIGUuYXBwbHkodGhp cyxhcmd1bWVudHMpfSk6ZTtpZihkPT09InVubG9hZCImJmIhPT0ib25lIil0aGlz Lm9uZShkLGYsZSk7ZWxzZXtqPTA7Zm9yKHZhciBvPXRoaXMubGVuZ3RoO2o8bztq KyspYy5ldmVudC5hZGQodGhpc1tqXSxkLGksZil9cmV0dXJuIHRoaXN9fSk7Yy5m bi5leHRlbmQoe3VuYmluZDpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBhPT09Im9i amVjdCImJgohYS5wcmV2ZW50RGVmYXVsdClmb3IodmFyIGQgaW4gYSl0aGlzLnVu YmluZChkLGFbZF0pO2Vsc2V7ZD0wO2Zvcih2YXIgZj10aGlzLmxlbmd0aDtkPGY7 ZCsrKWMuZXZlbnQucmVtb3ZlKHRoaXNbZF0sYSxiKX1yZXR1cm4gdGhpc30sZGVs ZWdhdGU6ZnVuY3Rpb24oYSxiLGQsZil7cmV0dXJuIHRoaXMubGl2ZShiLGQsZixh KX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihhLGIsZCl7cmV0dXJuIGFyZ3VtZW50cy5s ZW5ndGg9PT0wP3RoaXMudW5iaW5kKCJsaXZlIik6dGhpcy5kaWUoYixudWxsLGQs YSl9LHRyaWdnZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0 aW9uKCl7Yy5ldmVudC50cmlnZ2VyKGEsYix0aGlzKX0pfSx0cmlnZ2VySGFuZGxl cjpmdW5jdGlvbihhLGIpe2lmKHRoaXNbMF0pe2E9Yy5FdmVudChhKTthLnByZXZl bnREZWZhdWx0KCk7YS5zdG9wUHJvcGFnYXRpb24oKTtjLmV2ZW50LnRyaWdnZXIo YSxiLHRoaXNbMF0pO3JldHVybiBhLnJlc3VsdH19LAp0b2dnbGU6ZnVuY3Rpb24o YSl7Zm9yKHZhciBiPWFyZ3VtZW50cyxkPTE7ZDxiLmxlbmd0aDspYy5wcm94eShh LGJbZCsrXSk7cmV0dXJuIHRoaXMuY2xpY2soYy5wcm94eShhLGZ1bmN0aW9uKGYp e3ZhciBlPShjLmRhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkKXx8MCklZDtj LmRhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkLGUrMSk7Zi5wcmV2ZW50RGVm YXVsdCgpO3JldHVybiBiW2VdLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8ZmFsc2V9 KSl9LGhvdmVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubW91c2VlbnRlcihh KS5tb3VzZWxlYXZlKGJ8fGEpfX0pO3ZhciBHYT17Zm9jdXM6ImZvY3VzaW4iLGJs dXI6ImZvY3Vzb3V0Iixtb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6 Im1vdXNlb3V0In07Yy5lYWNoKFsibGl2ZSIsImRpZSJdLGZ1bmN0aW9uKGEsYil7 Yy5mbltiXT1mdW5jdGlvbihkLGYsZSxqKXt2YXIgaSxvPTAsayxuLHI9anx8dGhp cy5zZWxlY3RvciwKdT1qP3RoaXM6Yyh0aGlzLmNvbnRleHQpO2lmKGMuaXNGdW5j dGlvbihmKSl7ZT1mO2Y9d31mb3IoZD0oZHx8IiIpLnNwbGl0KCIgIik7KGk9ZFtv KytdKSE9bnVsbDspe2o9Ty5leGVjKGkpO2s9IiI7aWYoail7az1qWzBdO2k9aS5y ZXBsYWNlKE8sIiIpfWlmKGk9PT0iaG92ZXIiKWQucHVzaCgibW91c2VlbnRlciIr aywibW91c2VsZWF2ZSIrayk7ZWxzZXtuPWk7aWYoaT09PSJmb2N1cyJ8fGk9PT0i Ymx1ciIpe2QucHVzaChHYVtpXStrKTtpKz1rfWVsc2UgaT0oR2FbaV18fGkpK2s7 Yj09PSJsaXZlIj91LmVhY2goZnVuY3Rpb24oKXtjLmV2ZW50LmFkZCh0aGlzLHBh KGkscikse2RhdGE6ZixzZWxlY3RvcjpyLGhhbmRsZXI6ZSxvcmlnVHlwZTppLG9y aWdIYW5kbGVyOmUscHJlVHlwZTpufSl9KTp1LnVuYmluZChwYShpLHIpLGUpfX1y ZXR1cm4gdGhpc319KTtjLmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291 dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNl ZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2Vl bnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5 cHJlc3Mga2V5dXAgZXJyb3IiLnNwbGl0KCIgIiksCmZ1bmN0aW9uKGEsYil7Yy5m bltiXT1mdW5jdGlvbihkKXtyZXR1cm4gZD90aGlzLmJpbmQoYixkKTp0aGlzLnRy aWdnZXIoYil9O2lmKGMuYXR0ckZuKWMuYXR0ckZuW2JdPXRydWV9KTtBLmF0dGFj aEV2ZW50JiYhQS5hZGRFdmVudExpc3RlbmVyJiZBLmF0dGFjaEV2ZW50KCJvbnVu bG9hZCIsZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gYy5jYWNoZSlpZihjLmNhY2hl W2FdLmhhbmRsZSl0cnl7Yy5ldmVudC5yZW1vdmUoYy5jYWNoZVthXS5oYW5kbGUu ZWxlbSl9Y2F0Y2goYil7fX0pOyhmdW5jdGlvbigpe2Z1bmN0aW9uIGEoZyl7Zm9y KHZhciBoPSIiLGwsbT0wO2dbbV07bSsrKXtsPWdbbV07aWYobC5ub2RlVHlwZT09 PTN8fGwubm9kZVR5cGU9PT00KWgrPWwubm9kZVZhbHVlO2Vsc2UgaWYobC5ub2Rl VHlwZSE9PTgpaCs9YShsLmNoaWxkTm9kZXMpfXJldHVybiBofWZ1bmN0aW9uIGIo ZyxoLGwsbSxxLHApe3E9MDtmb3IodmFyIHY9bS5sZW5ndGg7cTx2O3ErKyl7dmFy IHQ9bVtxXTsKaWYodCl7dD10W2ddO2Zvcih2YXIgeT1mYWxzZTt0Oyl7aWYodC5z aXpjYWNoZT09PWwpe3k9bVt0LnNpenNldF07YnJlYWt9aWYodC5ub2RlVHlwZT09 PTEmJiFwKXt0LnNpemNhY2hlPWw7dC5zaXpzZXQ9cX1pZih0Lm5vZGVOYW1lLnRv TG93ZXJDYXNlKCk9PT1oKXt5PXQ7YnJlYWt9dD10W2ddfW1bcV09eX19fWZ1bmN0 aW9uIGQoZyxoLGwsbSxxLHApe3E9MDtmb3IodmFyIHY9bS5sZW5ndGg7cTx2O3Er Kyl7dmFyIHQ9bVtxXTtpZih0KXt0PXRbZ107Zm9yKHZhciB5PWZhbHNlO3Q7KXtp Zih0LnNpemNhY2hlPT09bCl7eT1tW3Quc2l6c2V0XTticmVha31pZih0Lm5vZGVU eXBlPT09MSl7aWYoIXApe3Quc2l6Y2FjaGU9bDt0LnNpenNldD1xfWlmKHR5cGVv ZiBoIT09InN0cmluZyIpe2lmKHQ9PT1oKXt5PXRydWU7YnJlYWt9fWVsc2UgaWYo ay5maWx0ZXIoaCxbdF0pLmxlbmd0aD4wKXt5PXQ7YnJlYWt9fXQ9dFtnXX1tW3Fd PXl9fX12YXIgZj0vKCg/OlwoKD86XChbXigpXStcKXxbXigpXSspK1wpfFxbKD86 XFtbXltcXV0qXF18WyciXVteJyJdKlsnIl18W15bXF0nIl0rKStcXXxcXC58W14g Pit+LChcW1xcXSspK3xbPit+XSkoXHMqLFxzKik/KCg/Oi58XHJ8XG4pKikvZywK ZT0wLGo9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxpPWZhbHNlLG89dHJ1ZTtb MCwwXS5zb3J0KGZ1bmN0aW9uKCl7bz1mYWxzZTtyZXR1cm4gMH0pO3ZhciBrPWZ1 bmN0aW9uKGcsaCxsLG0pe2w9bHx8W107dmFyIHE9aD1ofHxzO2lmKGgubm9kZVR5 cGUhPT0xJiZoLm5vZGVUeXBlIT09OSlyZXR1cm5bXTtpZighZ3x8dHlwZW9mIGch PT0ic3RyaW5nIilyZXR1cm4gbDtmb3IodmFyIHA9W10sdix0LHksUyxIPXRydWUs TT14KGgpLEk9ZzsoZi5leGVjKCIiKSx2PWYuZXhlYyhJKSkhPT1udWxsOyl7ST12 WzNdO3AucHVzaCh2WzFdKTtpZih2WzJdKXtTPXZbM107YnJlYWt9fWlmKHAubGVu Z3RoPjEmJnIuZXhlYyhnKSlpZihwLmxlbmd0aD09PTImJm4ucmVsYXRpdmVbcFsw XV0pdD1nYShwWzBdK3BbMV0saCk7ZWxzZSBmb3IodD1uLnJlbGF0aXZlW3BbMF1d P1toXTprKHAuc2hpZnQoKSxoKTtwLmxlbmd0aDspe2c9cC5zaGlmdCgpO2lmKG4u cmVsYXRpdmVbZ10pZys9cC5zaGlmdCgpOwp0PWdhKGcsdCl9ZWxzZXtpZighbSYm cC5sZW5ndGg+MSYmaC5ub2RlVHlwZT09PTkmJiFNJiZuLm1hdGNoLklELnRlc3Qo cFswXSkmJiFuLm1hdGNoLklELnRlc3QocFtwLmxlbmd0aC0xXSkpe3Y9ay5maW5k KHAuc2hpZnQoKSxoLE0pO2g9di5leHByP2suZmlsdGVyKHYuZXhwcix2LnNldClb MF06di5zZXRbMF19aWYoaCl7dj1tP3tleHByOnAucG9wKCksc2V0OnoobSl9Omsu ZmluZChwLnBvcCgpLHAubGVuZ3RoPT09MSYmKHBbMF09PT0ifiJ8fHBbMF09PT0i KyIpJiZoLnBhcmVudE5vZGU/aC5wYXJlbnROb2RlOmgsTSk7dD12LmV4cHI/ay5m aWx0ZXIodi5leHByLHYuc2V0KTp2LnNldDtpZihwLmxlbmd0aD4wKXk9eih0KTtl bHNlIEg9ZmFsc2U7Zm9yKDtwLmxlbmd0aDspe3ZhciBEPXAucG9wKCk7dj1EO2lm KG4ucmVsYXRpdmVbRF0pdj1wLnBvcCgpO2Vsc2UgRD0iIjtpZih2PT1udWxsKXY9 aDtuLnJlbGF0aXZlW0RdKHksdixNKX19ZWxzZSB5PVtdfXl8fCh5PXQpO3l8fGsu ZXJyb3IoRHx8CmcpO2lmKGouY2FsbCh5KT09PSJbb2JqZWN0IEFycmF5XSIpaWYo SClpZihoJiZoLm5vZGVUeXBlPT09MSlmb3IoZz0wO3lbZ10hPW51bGw7ZysrKXtp Zih5W2ddJiYoeVtnXT09PXRydWV8fHlbZ10ubm9kZVR5cGU9PT0xJiZFKGgseVtn XSkpKWwucHVzaCh0W2ddKX1lbHNlIGZvcihnPTA7eVtnXSE9bnVsbDtnKyspeVtn XSYmeVtnXS5ub2RlVHlwZT09PTEmJmwucHVzaCh0W2ddKTtlbHNlIGwucHVzaC5h cHBseShsLHkpO2Vsc2Ugeih5LGwpO2lmKFMpe2soUyxxLGwsbSk7ay51bmlxdWVT b3J0KGwpfXJldHVybiBsfTtrLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZyl7aWYoQil7 aT1vO2cuc29ydChCKTtpZihpKWZvcih2YXIgaD0xO2g8Zy5sZW5ndGg7aCsrKWdb aF09PT1nW2gtMV0mJmcuc3BsaWNlKGgtLSwxKX1yZXR1cm4gZ307ay5tYXRjaGVz PWZ1bmN0aW9uKGcsaCl7cmV0dXJuIGsoZyxudWxsLG51bGwsaCl9O2suZmluZD1m dW5jdGlvbihnLGgsbCl7dmFyIG0scTtpZighZylyZXR1cm5bXTsKZm9yKHZhciBw PTAsdj1uLm9yZGVyLmxlbmd0aDtwPHY7cCsrKXt2YXIgdD1uLm9yZGVyW3BdO2lm KHE9bi5sZWZ0TWF0Y2hbdF0uZXhlYyhnKSl7dmFyIHk9cVsxXTtxLnNwbGljZSgx LDEpO2lmKHkuc3Vic3RyKHkubGVuZ3RoLTEpIT09IlxcIil7cVsxXT0ocVsxXXx8 IiIpLnJlcGxhY2UoL1xcL2csIiIpO209bi5maW5kW3RdKHEsaCxsKTtpZihtIT1u dWxsKXtnPWcucmVwbGFjZShuLm1hdGNoW3RdLCIiKTticmVha319fX1tfHwobT1o LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpO3JldHVybntzZXQ6bSxleHByOmd9 fTtrLmZpbHRlcj1mdW5jdGlvbihnLGgsbCxtKXtmb3IodmFyIHE9ZyxwPVtdLHY9 aCx0LHksUz1oJiZoWzBdJiZ4KGhbMF0pO2cmJmgubGVuZ3RoOyl7Zm9yKHZhciBI IGluIG4uZmlsdGVyKWlmKCh0PW4ubGVmdE1hdGNoW0hdLmV4ZWMoZykpIT1udWxs JiZ0WzJdKXt2YXIgTT1uLmZpbHRlcltIXSxJLEQ7RD10WzFdO3k9ZmFsc2U7dC5z cGxpY2UoMSwxKTtpZihELnN1YnN0cihELmxlbmd0aC0KMSkhPT0iXFwiKXtpZih2 PT09cClwPVtdO2lmKG4ucHJlRmlsdGVyW0hdKWlmKHQ9bi5wcmVGaWx0ZXJbSF0o dCx2LGwscCxtLFMpKXtpZih0PT09dHJ1ZSljb250aW51ZX1lbHNlIHk9ST10cnVl O2lmKHQpZm9yKHZhciBVPTA7KEQ9dltVXSkhPW51bGw7VSsrKWlmKEQpe0k9TShE LHQsVSx2KTt2YXIgSGE9bV4hIUk7aWYobCYmSSE9bnVsbClpZihIYSl5PXRydWU7 ZWxzZSB2W1VdPWZhbHNlO2Vsc2UgaWYoSGEpe3AucHVzaChEKTt5PXRydWV9fWlm KEkhPT13KXtsfHwodj1wKTtnPWcucmVwbGFjZShuLm1hdGNoW0hdLCIiKTtpZigh eSlyZXR1cm5bXTticmVha319fWlmKGc9PT1xKWlmKHk9PW51bGwpay5lcnJvcihn KTtlbHNlIGJyZWFrO3E9Z31yZXR1cm4gdn07ay5lcnJvcj1mdW5jdGlvbihnKXt0 aHJvdyJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiK2c7 fTt2YXIgbj1rLnNlbGVjdG9ycz17b3JkZXI6WyJJRCIsIk5BTUUiLCJUQUciXSxt YXRjaDp7SUQ6LyMoKD86W1x3XHUwMGMwLVx1RkZGRi1dfFxcLikrKS8sCkNMQVNT Oi9cLigoPzpbXHdcdTAwYzAtXHVGRkZGLV18XFwuKSspLyxOQU1FOi9cW25hbWU9 WyciXSooKD86W1x3XHUwMGMwLVx1RkZGRi1dfFxcLikrKVsnIl0qXF0vLEFUVFI6 L1xbXHMqKCg/Oltcd1x1MDBjMC1cdUZGRkYtXXxcXC4pKylccyooPzooXFM/PSlc cyooWyciXSopKC4qPylcM3wpXHMqXF0vLFRBRzovXigoPzpbXHdcdTAwYzAtXHVG RkZGXCotXXxcXC4pKykvLENISUxEOi86KG9ubHl8bnRofGxhc3R8Zmlyc3QpLWNo aWxkKD86XCgoZXZlbnxvZGR8W1xkbistXSopXCkpPy8sUE9TOi86KG50aHxlcXxn dHxsdHxmaXJzdHxsYXN0fGV2ZW58b2RkKSg/OlwoKFxkKilcKSk/KD89W14tXXwk KS8sUFNFVURPOi86KCg/Oltcd1x1MDBjMC1cdUZGRkYtXXxcXC4pKykoPzpcKChb JyJdPykoKD86XChbXlwpXStcKXxbXlwoXCldKikrKVwyXCkpPy99LGxlZnRNYXRj aDp7fSxhdHRyTWFwOnsiY2xhc3MiOiJjbGFzc05hbWUiLCJmb3IiOiJodG1sRm9y In0sYXR0ckhhbmRsZTp7aHJlZjpmdW5jdGlvbihnKXtyZXR1cm4gZy5nZXRBdHRy aWJ1dGUoImhyZWYiKX19LApyZWxhdGl2ZTp7IisiOmZ1bmN0aW9uKGcsaCl7dmFy IGw9dHlwZW9mIGg9PT0ic3RyaW5nIixtPWwmJiEvXFcvLnRlc3QoaCk7bD1sJiYh bTtpZihtKWg9aC50b0xvd2VyQ2FzZSgpO209MDtmb3IodmFyIHE9Zy5sZW5ndGgs cDttPHE7bSsrKWlmKHA9Z1ttXSl7Zm9yKDsocD1wLnByZXZpb3VzU2libGluZykm JnAubm9kZVR5cGUhPT0xOyk7Z1ttXT1sfHxwJiZwLm5vZGVOYW1lLnRvTG93ZXJD YXNlKCk9PT1oP3B8fGZhbHNlOnA9PT1ofWwmJmsuZmlsdGVyKGgsZyx0cnVlKX0s Ij4iOmZ1bmN0aW9uKGcsaCl7dmFyIGw9dHlwZW9mIGg9PT0ic3RyaW5nIjtpZihs JiYhL1xXLy50ZXN0KGgpKXtoPWgudG9Mb3dlckNhc2UoKTtmb3IodmFyIG09MCxx PWcubGVuZ3RoO208cTttKyspe3ZhciBwPWdbbV07aWYocCl7bD1wLnBhcmVudE5v ZGU7Z1ttXT1sLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1oP2w6ZmFsc2V9fX1l bHNle209MDtmb3IocT1nLmxlbmd0aDttPHE7bSsrKWlmKHA9Z1ttXSlnW21dPQps P3AucGFyZW50Tm9kZTpwLnBhcmVudE5vZGU9PT1oO2wmJmsuZmlsdGVyKGgsZyx0 cnVlKX19LCIiOmZ1bmN0aW9uKGcsaCxsKXt2YXIgbT1lKysscT1kO2lmKHR5cGVv ZiBoPT09InN0cmluZyImJiEvXFcvLnRlc3QoaCkpe3ZhciBwPWg9aC50b0xvd2Vy Q2FzZSgpO3E9Yn1xKCJwYXJlbnROb2RlIixoLG0sZyxwLGwpfSwifiI6ZnVuY3Rp b24oZyxoLGwpe3ZhciBtPWUrKyxxPWQ7aWYodHlwZW9mIGg9PT0ic3RyaW5nIiYm IS9cVy8udGVzdChoKSl7dmFyIHA9aD1oLnRvTG93ZXJDYXNlKCk7cT1ifXEoInBy ZXZpb3VzU2libGluZyIsaCxtLGcscCxsKX19LGZpbmQ6e0lEOmZ1bmN0aW9uKGcs aCxsKXtpZih0eXBlb2YgaC5nZXRFbGVtZW50QnlJZCE9PSJ1bmRlZmluZWQiJiYh bClyZXR1cm4oZz1oLmdldEVsZW1lbnRCeUlkKGdbMV0pKT9bZ106W119LE5BTUU6 ZnVuY3Rpb24oZyxoKXtpZih0eXBlb2YgaC5nZXRFbGVtZW50c0J5TmFtZSE9PSJ1 bmRlZmluZWQiKXt2YXIgbD1bXTsKaD1oLmdldEVsZW1lbnRzQnlOYW1lKGdbMV0p O2Zvcih2YXIgbT0wLHE9aC5sZW5ndGg7bTxxO20rKyloW21dLmdldEF0dHJpYnV0 ZSgibmFtZSIpPT09Z1sxXSYmbC5wdXNoKGhbbV0pO3JldHVybiBsLmxlbmd0aD09 PTA/bnVsbDpsfX0sVEFHOmZ1bmN0aW9uKGcsaCl7cmV0dXJuIGguZ2V0RWxlbWVu dHNCeVRhZ05hbWUoZ1sxXSl9fSxwcmVGaWx0ZXI6e0NMQVNTOmZ1bmN0aW9uKGcs aCxsLG0scSxwKXtnPSIgIitnWzFdLnJlcGxhY2UoL1xcL2csIiIpKyIgIjtpZihw KXJldHVybiBnO3A9MDtmb3IodmFyIHY7KHY9aFtwXSkhPW51bGw7cCsrKWlmKHYp aWYocV4odi5jbGFzc05hbWUmJigiICIrdi5jbGFzc05hbWUrIiAiKS5yZXBsYWNl KC9bXHRcbl0vZywiICIpLmluZGV4T2YoZyk+PTApKWx8fG0ucHVzaCh2KTtlbHNl IGlmKGwpaFtwXT1mYWxzZTtyZXR1cm4gZmFsc2V9LElEOmZ1bmN0aW9uKGcpe3Jl dHVybiBnWzFdLnJlcGxhY2UoL1xcL2csIiIpfSxUQUc6ZnVuY3Rpb24oZyl7cmV0 dXJuIGdbMV0udG9Mb3dlckNhc2UoKX0sCkNISUxEOmZ1bmN0aW9uKGcpe2lmKGdb MV09PT0ibnRoIil7dmFyIGg9LygtPykoXGQqKW4oKD86XCt8LSk/XGQqKS8uZXhl YyhnWzJdPT09ImV2ZW4iJiYiMm4ifHxnWzJdPT09Im9kZCImJiIybisxInx8IS9c RC8udGVzdChnWzJdKSYmIjBuKyIrZ1syXXx8Z1syXSk7Z1syXT1oWzFdKyhoWzJd fHwxKS0wO2dbM109aFszXS0wfWdbMF09ZSsrO3JldHVybiBnfSxBVFRSOmZ1bmN0 aW9uKGcsaCxsLG0scSxwKXtoPWdbMV0ucmVwbGFjZSgvXFwvZywiIik7aWYoIXAm Jm4uYXR0ck1hcFtoXSlnWzFdPW4uYXR0ck1hcFtoXTtpZihnWzJdPT09In49Iiln WzRdPSIgIitnWzRdKyIgIjtyZXR1cm4gZ30sUFNFVURPOmZ1bmN0aW9uKGcsaCxs LG0scSl7aWYoZ1sxXT09PSJub3QiKWlmKChmLmV4ZWMoZ1szXSl8fCIiKS5sZW5n dGg+MXx8L15cdy8udGVzdChnWzNdKSlnWzNdPWsoZ1szXSxudWxsLG51bGwsaCk7 ZWxzZXtnPWsuZmlsdGVyKGdbM10saCxsLHRydWVecSk7bHx8bS5wdXNoLmFwcGx5 KG0sCmcpO3JldHVybiBmYWxzZX1lbHNlIGlmKG4ubWF0Y2guUE9TLnRlc3QoZ1sw XSl8fG4ubWF0Y2guQ0hJTEQudGVzdChnWzBdKSlyZXR1cm4gdHJ1ZTtyZXR1cm4g Z30sUE9TOmZ1bmN0aW9uKGcpe2cudW5zaGlmdCh0cnVlKTtyZXR1cm4gZ319LGZp bHRlcnM6e2VuYWJsZWQ6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuZGlzYWJsZWQ9PT1m YWxzZSYmZy50eXBlIT09ImhpZGRlbiJ9LGRpc2FibGVkOmZ1bmN0aW9uKGcpe3Jl dHVybiBnLmRpc2FibGVkPT09dHJ1ZX0sY2hlY2tlZDpmdW5jdGlvbihnKXtyZXR1 cm4gZy5jaGVja2VkPT09dHJ1ZX0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZyl7cmV0dXJu IGcuc2VsZWN0ZWQ9PT10cnVlfSxwYXJlbnQ6ZnVuY3Rpb24oZyl7cmV0dXJuISFn LmZpcnN0Q2hpbGR9LGVtcHR5OmZ1bmN0aW9uKGcpe3JldHVybiFnLmZpcnN0Q2hp bGR9LGhhczpmdW5jdGlvbihnLGgsbCl7cmV0dXJuISFrKGxbM10sZykubGVuZ3Ro fSxoZWFkZXI6ZnVuY3Rpb24oZyl7cmV0dXJuL2hcZC9pLnRlc3QoZy5ub2RlTmFt ZSl9LAp0ZXh0OmZ1bmN0aW9uKGcpe3JldHVybiJ0ZXh0Ij09PWcudHlwZX0scmFk aW86ZnVuY3Rpb24oZyl7cmV0dXJuInJhZGlvIj09PWcudHlwZX0sY2hlY2tib3g6 ZnVuY3Rpb24oZyl7cmV0dXJuImNoZWNrYm94Ij09PWcudHlwZX0sZmlsZTpmdW5j dGlvbihnKXtyZXR1cm4iZmlsZSI9PT1nLnR5cGV9LHBhc3N3b3JkOmZ1bmN0aW9u KGcpe3JldHVybiJwYXNzd29yZCI9PT1nLnR5cGV9LHN1Ym1pdDpmdW5jdGlvbihn KXtyZXR1cm4ic3VibWl0Ij09PWcudHlwZX0saW1hZ2U6ZnVuY3Rpb24oZyl7cmV0 dXJuImltYWdlIj09PWcudHlwZX0scmVzZXQ6ZnVuY3Rpb24oZyl7cmV0dXJuInJl c2V0Ij09PWcudHlwZX0sYnV0dG9uOmZ1bmN0aW9uKGcpe3JldHVybiJidXR0b24i PT09Zy50eXBlfHxnLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iYnV0dG9uIn0s aW5wdXQ6ZnVuY3Rpb24oZyl7cmV0dXJuL2lucHV0fHNlbGVjdHx0ZXh0YXJlYXxi dXR0b24vaS50ZXN0KGcubm9kZU5hbWUpfX0sCnNldEZpbHRlcnM6e2ZpcnN0OmZ1 bmN0aW9uKGcsaCl7cmV0dXJuIGg9PT0wfSxsYXN0OmZ1bmN0aW9uKGcsaCxsLG0p e3JldHVybiBoPT09bS5sZW5ndGgtMX0sZXZlbjpmdW5jdGlvbihnLGgpe3JldHVy biBoJTI9PT0wfSxvZGQ6ZnVuY3Rpb24oZyxoKXtyZXR1cm4gaCUyPT09MX0sbHQ6 ZnVuY3Rpb24oZyxoLGwpe3JldHVybiBoPGxbM10tMH0sZ3Q6ZnVuY3Rpb24oZyxo LGwpe3JldHVybiBoPmxbM10tMH0sbnRoOmZ1bmN0aW9uKGcsaCxsKXtyZXR1cm4g bFszXS0wPT09aH0sZXE6ZnVuY3Rpb24oZyxoLGwpe3JldHVybiBsWzNdLTA9PT1o fX0sZmlsdGVyOntQU0VVRE86ZnVuY3Rpb24oZyxoLGwsbSl7dmFyIHE9aFsxXSxw PW4uZmlsdGVyc1txXTtpZihwKXJldHVybiBwKGcsbCxoLG0pO2Vsc2UgaWYocT09 PSJjb250YWlucyIpcmV0dXJuKGcudGV4dENvbnRlbnR8fGcuaW5uZXJUZXh0fHxh KFtnXSl8fCIiKS5pbmRleE9mKGhbM10pPj0wO2Vsc2UgaWYocT09PSJub3QiKXto PQpoWzNdO2w9MDtmb3IobT1oLmxlbmd0aDtsPG07bCsrKWlmKGhbbF09PT1nKXJl dHVybiBmYWxzZTtyZXR1cm4gdHJ1ZX1lbHNlIGsuZXJyb3IoIlN5bnRheCBlcnJv ciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrcSl9LENISUxEOmZ1bmN0aW9u KGcsaCl7dmFyIGw9aFsxXSxtPWc7c3dpdGNoKGwpe2Nhc2UgIm9ubHkiOmNhc2Ug ImZpcnN0Ijpmb3IoO209bS5wcmV2aW91c1NpYmxpbmc7KWlmKG0ubm9kZVR5cGU9 PT0xKXJldHVybiBmYWxzZTtpZihsPT09ImZpcnN0IilyZXR1cm4gdHJ1ZTttPWc7 Y2FzZSAibGFzdCI6Zm9yKDttPW0ubmV4dFNpYmxpbmc7KWlmKG0ubm9kZVR5cGU9 PT0xKXJldHVybiBmYWxzZTtyZXR1cm4gdHJ1ZTtjYXNlICJudGgiOmw9aFsyXTt2 YXIgcT1oWzNdO2lmKGw9PT0xJiZxPT09MClyZXR1cm4gdHJ1ZTtoPWhbMF07dmFy IHA9Zy5wYXJlbnROb2RlO2lmKHAmJihwLnNpemNhY2hlIT09aHx8IWcubm9kZUlu ZGV4KSl7dmFyIHY9MDtmb3IobT1wLmZpcnN0Q2hpbGQ7bTttPQptLm5leHRTaWJs aW5nKWlmKG0ubm9kZVR5cGU9PT0xKW0ubm9kZUluZGV4PSsrdjtwLnNpemNhY2hl PWh9Zz1nLm5vZGVJbmRleC1xO3JldHVybiBsPT09MD9nPT09MDpnJWw9PT0wJiZn L2w+PTB9fSxJRDpmdW5jdGlvbihnLGgpe3JldHVybiBnLm5vZGVUeXBlPT09MSYm Zy5nZXRBdHRyaWJ1dGUoImlkIik9PT1ofSxUQUc6ZnVuY3Rpb24oZyxoKXtyZXR1 cm4gaD09PSIqIiYmZy5ub2RlVHlwZT09PTF8fGcubm9kZU5hbWUudG9Mb3dlckNh c2UoKT09PWh9LENMQVNTOmZ1bmN0aW9uKGcsaCl7cmV0dXJuKCIgIisoZy5jbGFz c05hbWV8fGcuZ2V0QXR0cmlidXRlKCJjbGFzcyIpKSsiICIpLmluZGV4T2YoaCk+ LTF9LEFUVFI6ZnVuY3Rpb24oZyxoKXt2YXIgbD1oWzFdO2c9bi5hdHRySGFuZGxl W2xdP24uYXR0ckhhbmRsZVtsXShnKTpnW2xdIT1udWxsP2dbbF06Zy5nZXRBdHRy aWJ1dGUobCk7bD1nKyIiO3ZhciBtPWhbMl07aD1oWzRdO3JldHVybiBnPT1udWxs P209PT0iIT0iOm09PT0KIj0iP2w9PT1oOm09PT0iKj0iP2wuaW5kZXhPZihoKT49 MDptPT09In49Ij8oIiAiK2wrIiAiKS5pbmRleE9mKGgpPj0wOiFoP2wmJmchPT1m YWxzZTptPT09IiE9Ij9sIT09aDptPT09Il49Ij9sLmluZGV4T2YoaCk9PT0wOm09 PT0iJD0iP2wuc3Vic3RyKGwubGVuZ3RoLWgubGVuZ3RoKT09PWg6bT09PSJ8PSI/ bD09PWh8fGwuc3Vic3RyKDAsaC5sZW5ndGgrMSk9PT1oKyItIjpmYWxzZX0sUE9T OmZ1bmN0aW9uKGcsaCxsLG0pe3ZhciBxPW4uc2V0RmlsdGVyc1toWzJdXTtpZihx KXJldHVybiBxKGcsbCxoLG0pfX19LHI9bi5tYXRjaC5QT1M7Zm9yKHZhciB1IGlu IG4ubWF0Y2gpe24ubWF0Y2hbdV09bmV3IFJlZ0V4cChuLm1hdGNoW3VdLnNvdXJj ZSsvKD8hW15cW10qXF0pKD8hW15cKF0qXCkpLy5zb3VyY2UpO24ubGVmdE1hdGNo W3VdPW5ldyBSZWdFeHAoLyheKD86LnxccnxcbikqPykvLnNvdXJjZStuLm1hdGNo W3VdLnNvdXJjZS5yZXBsYWNlKC9cXChcZCspL2csZnVuY3Rpb24oZywKaCl7cmV0 dXJuIlxcIisoaC0wKzEpfSkpfXZhciB6PWZ1bmN0aW9uKGcsaCl7Zz1BcnJheS5w cm90b3R5cGUuc2xpY2UuY2FsbChnLDApO2lmKGgpe2gucHVzaC5hcHBseShoLGcp O3JldHVybiBofXJldHVybiBnfTt0cnl7QXJyYXkucHJvdG90eXBlLnNsaWNlLmNh bGwocy5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcywwKX1jYXRjaChDKXt6PWZ1 bmN0aW9uKGcsaCl7aD1ofHxbXTtpZihqLmNhbGwoZyk9PT0iW29iamVjdCBBcnJh eV0iKUFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGgsZyk7ZWxzZSBpZih0eXBl b2YgZy5sZW5ndGg9PT0ibnVtYmVyIilmb3IodmFyIGw9MCxtPWcubGVuZ3RoO2w8 bTtsKyspaC5wdXNoKGdbbF0pO2Vsc2UgZm9yKGw9MDtnW2xdO2wrKyloLnB1c2go Z1tsXSk7cmV0dXJuIGh9fXZhciBCO2lmKHMuZG9jdW1lbnRFbGVtZW50LmNvbXBh cmVEb2N1bWVudFBvc2l0aW9uKUI9ZnVuY3Rpb24oZyxoKXtpZighZy5jb21wYXJl RG9jdW1lbnRQb3NpdGlvbnx8CiFoLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKXtp ZihnPT1oKWk9dHJ1ZTtyZXR1cm4gZy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8t MToxfWc9Zy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihoKSY0Py0xOmc9PT1oPzA6 MTtpZihnPT09MClpPXRydWU7cmV0dXJuIGd9O2Vsc2UgaWYoInNvdXJjZUluZGV4 ImluIHMuZG9jdW1lbnRFbGVtZW50KUI9ZnVuY3Rpb24oZyxoKXtpZighZy5zb3Vy Y2VJbmRleHx8IWguc291cmNlSW5kZXgpe2lmKGc9PWgpaT10cnVlO3JldHVybiBn LnNvdXJjZUluZGV4Py0xOjF9Zz1nLnNvdXJjZUluZGV4LWguc291cmNlSW5kZXg7 aWYoZz09PTApaT10cnVlO3JldHVybiBnfTtlbHNlIGlmKHMuY3JlYXRlUmFuZ2Up Qj1mdW5jdGlvbihnLGgpe2lmKCFnLm93bmVyRG9jdW1lbnR8fCFoLm93bmVyRG9j dW1lbnQpe2lmKGc9PWgpaT10cnVlO3JldHVybiBnLm93bmVyRG9jdW1lbnQ/LTE6 MX12YXIgbD1nLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSxtPQpoLm93bmVy RG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtsLnNldFN0YXJ0KGcsMCk7bC5zZXRFbmQo ZywwKTttLnNldFN0YXJ0KGgsMCk7bS5zZXRFbmQoaCwwKTtnPWwuY29tcGFyZUJv dW5kYXJ5UG9pbnRzKFJhbmdlLlNUQVJUX1RPX0VORCxtKTtpZihnPT09MClpPXRy dWU7cmV0dXJuIGd9OyhmdW5jdGlvbigpe3ZhciBnPXMuY3JlYXRlRWxlbWVudCgi ZGl2IiksaD0ic2NyaXB0IisobmV3IERhdGUpLmdldFRpbWUoKTtnLmlubmVySFRN TD0iPGEgbmFtZT0nIitoKyInLz4iO3ZhciBsPXMuZG9jdW1lbnRFbGVtZW50O2wu aW5zZXJ0QmVmb3JlKGcsbC5maXJzdENoaWxkKTtpZihzLmdldEVsZW1lbnRCeUlk KGgpKXtuLmZpbmQuSUQ9ZnVuY3Rpb24obSxxLHApe2lmKHR5cGVvZiBxLmdldEVs ZW1lbnRCeUlkIT09InVuZGVmaW5lZCImJiFwKXJldHVybihxPXEuZ2V0RWxlbWVu dEJ5SWQobVsxXSkpP3EuaWQ9PT1tWzFdfHx0eXBlb2YgcS5nZXRBdHRyaWJ1dGVO b2RlIT09InVuZGVmaW5lZCImJgpxLmdldEF0dHJpYnV0ZU5vZGUoImlkIikubm9k ZVZhbHVlPT09bVsxXT9bcV06dzpbXX07bi5maWx0ZXIuSUQ9ZnVuY3Rpb24obSxx KXt2YXIgcD10eXBlb2YgbS5nZXRBdHRyaWJ1dGVOb2RlIT09InVuZGVmaW5lZCIm Jm0uZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gbS5ub2RlVHlwZT09PTEm JnAmJnAubm9kZVZhbHVlPT09cX19bC5yZW1vdmVDaGlsZChnKTtsPWc9bnVsbH0p KCk7KGZ1bmN0aW9uKCl7dmFyIGc9cy5jcmVhdGVFbGVtZW50KCJkaXYiKTtnLmFw cGVuZENoaWxkKHMuY3JlYXRlQ29tbWVudCgiIikpO2lmKGcuZ2V0RWxlbWVudHNC eVRhZ05hbWUoIioiKS5sZW5ndGg+MCluLmZpbmQuVEFHPWZ1bmN0aW9uKGgsbCl7 bD1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKGhbMV0pO2lmKGhbMV09PT0iKiIpe2g9 W107Zm9yKHZhciBtPTA7bFttXTttKyspbFttXS5ub2RlVHlwZT09PTEmJmgucHVz aChsW21dKTtsPWh9cmV0dXJuIGx9O2cuaW5uZXJIVE1MPSI8YSBocmVmPScjJz48 L2E+IjsKaWYoZy5maXJzdENoaWxkJiZ0eXBlb2YgZy5maXJzdENoaWxkLmdldEF0 dHJpYnV0ZSE9PSJ1bmRlZmluZWQiJiZnLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRl KCJocmVmIikhPT0iIyIpbi5hdHRySGFuZGxlLmhyZWY9ZnVuY3Rpb24oaCl7cmV0 dXJuIGguZ2V0QXR0cmlidXRlKCJocmVmIiwyKX07Zz1udWxsfSkoKTtzLnF1ZXJ5 U2VsZWN0b3JBbGwmJmZ1bmN0aW9uKCl7dmFyIGc9ayxoPXMuY3JlYXRlRWxlbWVu dCgiZGl2Iik7aC5pbm5lckhUTUw9IjxwIGNsYXNzPSdURVNUJz48L3A+IjtpZigh KGgucXVlcnlTZWxlY3RvckFsbCYmaC5xdWVyeVNlbGVjdG9yQWxsKCIuVEVTVCIp Lmxlbmd0aD09PTApKXtrPWZ1bmN0aW9uKG0scSxwLHYpe3E9cXx8cztpZighdiYm cS5ub2RlVHlwZT09PTkmJiF4KHEpKXRyeXtyZXR1cm4geihxLnF1ZXJ5U2VsZWN0 b3JBbGwobSkscCl9Y2F0Y2godCl7fXJldHVybiBnKG0scSxwLHYpfTtmb3IodmFy IGwgaW4gZylrW2xdPWdbbF07aD1udWxsfX0oKTsKKGZ1bmN0aW9uKCl7dmFyIGc9 cy5jcmVhdGVFbGVtZW50KCJkaXYiKTtnLmlubmVySFRNTD0iPGRpdiBjbGFzcz0n dGVzdCBlJz48L2Rpdj48ZGl2IGNsYXNzPSd0ZXN0Jz48L2Rpdj4iO2lmKCEoIWcu Z2V0RWxlbWVudHNCeUNsYXNzTmFtZXx8Zy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1l KCJlIikubGVuZ3RoPT09MCkpe2cubGFzdENoaWxkLmNsYXNzTmFtZT0iZSI7aWYo Zy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoIT09MSl7bi5vcmRl ci5zcGxpY2UoMSwwLCJDTEFTUyIpO24uZmluZC5DTEFTUz1mdW5jdGlvbihoLGws bSl7aWYodHlwZW9mIGwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9PSJ1bmRlZmlu ZWQiJiYhbSlyZXR1cm4gbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGhbMV0pfTtn PW51bGx9fX0pKCk7dmFyIEU9cy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5j dGlvbihnLGgpe3JldHVybiEhKGcuY29tcGFyZURvY3VtZW50UG9zaXRpb24oaCkm MTYpfToKZnVuY3Rpb24oZyxoKXtyZXR1cm4gZyE9PWgmJihnLmNvbnRhaW5zP2cu Y29udGFpbnMoaCk6dHJ1ZSl9LHg9ZnVuY3Rpb24oZyl7cmV0dXJuKGc9KGc/Zy5v d25lckRvY3VtZW50fHxnOjApLmRvY3VtZW50RWxlbWVudCk/Zy5ub2RlTmFtZSE9 PSJIVE1MIjpmYWxzZX0sZ2E9ZnVuY3Rpb24oZyxoKXt2YXIgbD1bXSxtPSIiLHE7 Zm9yKGg9aC5ub2RlVHlwZT9baF06aDtxPW4ubWF0Y2guUFNFVURPLmV4ZWMoZyk7 KXttKz1xWzBdO2c9Zy5yZXBsYWNlKG4ubWF0Y2guUFNFVURPLCIiKX1nPW4ucmVs YXRpdmVbZ10/ZysiKiI6ZztxPTA7Zm9yKHZhciBwPWgubGVuZ3RoO3E8cDtxKysp ayhnLGhbcV0sbCk7cmV0dXJuIGsuZmlsdGVyKG0sbCl9O2MuZmluZD1rO2MuZXhw cj1rLnNlbGVjdG9ycztjLmV4cHJbIjoiXT1jLmV4cHIuZmlsdGVycztjLnVuaXF1 ZT1rLnVuaXF1ZVNvcnQ7Yy50ZXh0PWE7Yy5pc1hNTERvYz14O2MuY29udGFpbnM9 RX0pKCk7dmFyIGViPS9VbnRpbCQvLGZiPS9eKD86cGFyZW50c3xwcmV2VW50aWx8 cHJldkFsbCkvLApnYj0vLC87Uj1BcnJheS5wcm90b3R5cGUuc2xpY2U7dmFyIElh PWZ1bmN0aW9uKGEsYixkKXtpZihjLmlzRnVuY3Rpb24oYikpcmV0dXJuIGMuZ3Jl cChhLGZ1bmN0aW9uKGUsail7cmV0dXJuISFiLmNhbGwoZSxqLGUpPT09ZH0pO2Vs c2UgaWYoYi5ub2RlVHlwZSlyZXR1cm4gYy5ncmVwKGEsZnVuY3Rpb24oZSl7cmV0 dXJuIGU9PT1iPT09ZH0pO2Vsc2UgaWYodHlwZW9mIGI9PT0ic3RyaW5nIil7dmFy IGY9Yy5ncmVwKGEsZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZVR5cGU9PT0xfSk7 aWYoVWEudGVzdChiKSlyZXR1cm4gYy5maWx0ZXIoYixmLCFkKTtlbHNlIGI9Yy5m aWx0ZXIoYixmKX1yZXR1cm4gYy5ncmVwKGEsZnVuY3Rpb24oZSl7cmV0dXJuIGMu aW5BcnJheShlLGIpPj0wPT09ZH0pfTtjLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlv bihhKXtmb3IodmFyIGI9dGhpcy5wdXNoU3RhY2soIiIsImZpbmQiLGEpLGQ9MCxm PTAsZT10aGlzLmxlbmd0aDtmPGU7ZisrKXtkPWIubGVuZ3RoOwpjLmZpbmQoYSx0 aGlzW2ZdLGIpO2lmKGY+MClmb3IodmFyIGo9ZDtqPGIubGVuZ3RoO2orKylmb3Io dmFyIGk9MDtpPGQ7aSsrKWlmKGJbaV09PT1iW2pdKXtiLnNwbGljZShqLS0sMSk7 YnJlYWt9fXJldHVybiBifSxoYXM6ZnVuY3Rpb24oYSl7dmFyIGI9YyhhKTtyZXR1 cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodmFyIGQ9MCxmPWIubGVuZ3Ro O2Q8ZjtkKyspaWYoYy5jb250YWlucyh0aGlzLGJbZF0pKXJldHVybiB0cnVlfSl9 LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soSWEodGhpcyxh LGZhbHNlKSwibm90IixhKX0sZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlz LnB1c2hTdGFjayhJYSh0aGlzLGEsdHJ1ZSksImZpbHRlciIsYSl9LGlzOmZ1bmN0 aW9uKGEpe3JldHVybiEhYSYmYy5maWx0ZXIoYSx0aGlzKS5sZW5ndGg+MH0sY2xv c2VzdDpmdW5jdGlvbihhLGIpe2lmKGMuaXNBcnJheShhKSl7dmFyIGQ9W10sZj10 aGlzWzBdLGUsaj0Ke30saTtpZihmJiZhLmxlbmd0aCl7ZT0wO2Zvcih2YXIgbz1h Lmxlbmd0aDtlPG87ZSsrKXtpPWFbZV07altpXXx8KGpbaV09Yy5leHByLm1hdGNo LlBPUy50ZXN0KGkpP2MoaSxifHx0aGlzLmNvbnRleHQpOmkpfWZvcig7ZiYmZi5v d25lckRvY3VtZW50JiZmIT09Yjspe2ZvcihpIGluIGope2U9altpXTtpZihlLmpx dWVyeT9lLmluZGV4KGYpPi0xOmMoZikuaXMoZSkpe2QucHVzaCh7c2VsZWN0b3I6 aSxlbGVtOmZ9KTtkZWxldGUgaltpXX19Zj1mLnBhcmVudE5vZGV9fXJldHVybiBk fXZhciBrPWMuZXhwci5tYXRjaC5QT1MudGVzdChhKT9jKGEsYnx8dGhpcy5jb250 ZXh0KTpudWxsO3JldHVybiB0aGlzLm1hcChmdW5jdGlvbihuLHIpe2Zvcig7ciYm ci5vd25lckRvY3VtZW50JiZyIT09Yjspe2lmKGs/ay5pbmRleChyKT4tMTpjKHIp LmlzKGEpKXJldHVybiByO3I9ci5wYXJlbnROb2RlfXJldHVybiBudWxsfSl9LGlu ZGV4OmZ1bmN0aW9uKGEpe2lmKCFhfHx0eXBlb2YgYT09PQoic3RyaW5nIilyZXR1 cm4gYy5pbkFycmF5KHRoaXNbMF0sYT9jKGEpOnRoaXMucGFyZW50KCkuY2hpbGRy ZW4oKSk7cmV0dXJuIGMuaW5BcnJheShhLmpxdWVyeT9hWzBdOmEsdGhpcyl9LGFk ZDpmdW5jdGlvbihhLGIpe2E9dHlwZW9mIGE9PT0ic3RyaW5nIj9jKGEsYnx8dGhp cy5jb250ZXh0KTpjLm1ha2VBcnJheShhKTtiPWMubWVyZ2UodGhpcy5nZXQoKSxh KTtyZXR1cm4gdGhpcy5wdXNoU3RhY2socWEoYVswXSl8fHFhKGJbMF0pP2I6Yy51 bmlxdWUoYikpfSxhbmRTZWxmOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWRkKHRo aXMucHJldk9iamVjdCl9fSk7Yy5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0 dXJuKGE9YS5wYXJlbnROb2RlKSYmYS5ub2RlVHlwZSE9PTExP2E6bnVsbH0scGFy ZW50czpmdW5jdGlvbihhKXtyZXR1cm4gYy5kaXIoYSwicGFyZW50Tm9kZSIpfSxw YXJlbnRzVW50aWw6ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBjLmRpcihhLCJwYXJl bnROb2RlIiwKZCl9LG5leHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGMubnRoKGEsMiwi bmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihhKXtyZXR1cm4gYy5udGgoYSwy LCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihhKXtyZXR1cm4g Yy5kaXIoYSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihhKXtyZXR1 cm4gYy5kaXIoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlv bihhLGIsZCl7cmV0dXJuIGMuZGlyKGEsIm5leHRTaWJsaW5nIixkKX0scHJldlVu dGlsOmZ1bmN0aW9uKGEsYixkKXtyZXR1cm4gYy5kaXIoYSwicHJldmlvdXNTaWJs aW5nIixkKX0sc2libGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGMuc2libGluZyhh LnBhcmVudE5vZGUuZmlyc3RDaGlsZCxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7 cmV0dXJuIGMuc2libGluZyhhLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlv bihhKXtyZXR1cm4gYy5ub2RlTmFtZShhLCJpZnJhbWUiKT8KYS5jb250ZW50RG9j dW1lbnR8fGEuY29udGVudFdpbmRvdy5kb2N1bWVudDpjLm1ha2VBcnJheShhLmNo aWxkTm9kZXMpfX0sZnVuY3Rpb24oYSxiKXtjLmZuW2FdPWZ1bmN0aW9uKGQsZil7 dmFyIGU9Yy5tYXAodGhpcyxiLGQpO2ViLnRlc3QoYSl8fChmPWQpO2lmKGYmJnR5 cGVvZiBmPT09InN0cmluZyIpZT1jLmZpbHRlcihmLGUpO2U9dGhpcy5sZW5ndGg+ MT9jLnVuaXF1ZShlKTplO2lmKCh0aGlzLmxlbmd0aD4xfHxnYi50ZXN0KGYpKSYm ZmIudGVzdChhKSllPWUucmV2ZXJzZSgpO3JldHVybiB0aGlzLnB1c2hTdGFjayhl LGEsUi5jYWxsKGFyZ3VtZW50cykuam9pbigiLCIpKX19KTtjLmV4dGVuZCh7Zmls dGVyOmZ1bmN0aW9uKGEsYixkKXtpZihkKWE9Ijpub3QoIithKyIpIjtyZXR1cm4g Yy5maW5kLm1hdGNoZXMoYSxiKX0sZGlyOmZ1bmN0aW9uKGEsYixkKXt2YXIgZj1b XTtmb3IoYT1hW2JdO2EmJmEubm9kZVR5cGUhPT05JiYoZD09PXd8fGEubm9kZVR5 cGUhPT0xfHwhYyhhKS5pcyhkKSk7KXthLm5vZGVUeXBlPT09CjEmJmYucHVzaChh KTthPWFbYl19cmV0dXJuIGZ9LG50aDpmdW5jdGlvbihhLGIsZCl7Yj1ifHwxO2Zv cih2YXIgZj0wO2E7YT1hW2RdKWlmKGEubm9kZVR5cGU9PT0xJiYrK2Y9PT1iKWJy ZWFrO3JldHVybiBhfSxzaWJsaW5nOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBkPVtd O2E7YT1hLm5leHRTaWJsaW5nKWEubm9kZVR5cGU9PT0xJiZhIT09YiYmZC5wdXNo KGEpO3JldHVybiBkfX0pO3ZhciBKYT0vIGpRdWVyeVxkKz0iKD86XGQrfG51bGwp Ii9nLFY9L15ccysvLEthPS8oPChbXHc6XSspW14+XSo/KVwvPi9nLGhiPS9eKD86 YXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkk L2ksTGE9LzwoW1x3Ol0rKS8saWI9Lzx0Ym9keS9pLGpiPS88fCYjP1x3KzsvLHRh PS88c2NyaXB0fDxvYmplY3R8PGVtYmVkfDxvcHRpb258PHN0eWxlL2ksdWE9L2No ZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksTWE9ZnVuY3Rpb24oYSxi LGQpe3JldHVybiBoYi50ZXN0KGQpPwphOmIrIj48LyIrZCsiPiJ9LEY9e29wdGlv bjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJd LGxlZ2VuZDpbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0sdGhlYWQ6WzEs Ijx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwv dGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90 cj48L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJv ZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSxhcmVhOlsxLCI8 bWFwPiIsIjwvbWFwPiJdLF9kZWZhdWx0OlswLCIiLCIiXX07Ri5vcHRncm91cD1G Lm9wdGlvbjtGLnRib2R5PUYudGZvb3Q9Ri5jb2xncm91cD1GLmNhcHRpb249Ri50 aGVhZDtGLnRoPUYudGQ7aWYoIWMuc3VwcG9ydC5odG1sU2VyaWFsaXplKUYuX2Rl ZmF1bHQ9WzEsImRpdjxkaXY+IiwiPC9kaXY+Il07Yy5mbi5leHRlbmQoe3RleHQ6 ZnVuY3Rpb24oYSl7aWYoYy5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2go ZnVuY3Rpb24oYil7dmFyIGQ9CmModGhpcyk7ZC50ZXh0KGEuY2FsbCh0aGlzLGIs ZC50ZXh0KCkpKX0pO2lmKHR5cGVvZiBhIT09Im9iamVjdCImJmEhPT13KXJldHVy biB0aGlzLmVtcHR5KCkuYXBwZW5kKCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9j dW1lbnR8fHMpLmNyZWF0ZVRleHROb2RlKGEpKTtyZXR1cm4gYy50ZXh0KHRoaXMp fSx3cmFwQWxsOmZ1bmN0aW9uKGEpe2lmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4g dGhpcy5lYWNoKGZ1bmN0aW9uKGQpe2ModGhpcykud3JhcEFsbChhLmNhbGwodGhp cyxkKSl9KTtpZih0aGlzWzBdKXt2YXIgYj1jKGEsdGhpc1swXS5vd25lckRvY3Vt ZW50KS5lcSgwKS5jbG9uZSh0cnVlKTt0aGlzWzBdLnBhcmVudE5vZGUmJmIuaW5z ZXJ0QmVmb3JlKHRoaXNbMF0pO2IubWFwKGZ1bmN0aW9uKCl7Zm9yKHZhciBkPXRo aXM7ZC5maXJzdENoaWxkJiZkLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0xOylkPWQu Zmlyc3RDaGlsZDtyZXR1cm4gZH0pLmFwcGVuZCh0aGlzKX1yZXR1cm4gdGhpc30s CndyYXBJbm5lcjpmdW5jdGlvbihhKXtpZihjLmlzRnVuY3Rpb24oYSkpcmV0dXJu IHRoaXMuZWFjaChmdW5jdGlvbihiKXtjKHRoaXMpLndyYXBJbm5lcihhLmNhbGwo dGhpcyxiKSl9KTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9Yyh0 aGlzKSxkPWIuY29udGVudHMoKTtkLmxlbmd0aD9kLndyYXBBbGwoYSk6Yi5hcHBl bmQoYSl9KX0sd3JhcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0 aW9uKCl7Yyh0aGlzKS53cmFwQWxsKGEpfSl9LHVud3JhcDpmdW5jdGlvbigpe3Jl dHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKXtjLm5vZGVOYW1lKHRo aXMsImJvZHkiKXx8Yyh0aGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMp fSkuZW5kKCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlw KGFyZ3VtZW50cyx0cnVlLGZ1bmN0aW9uKGEpe3RoaXMubm9kZVR5cGU9PT0xJiZ0 aGlzLmFwcGVuZENoaWxkKGEpfSl9LApwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJu IHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLHRydWUsZnVuY3Rpb24oYSl7dGhpcy5u b2RlVHlwZT09PTEmJnRoaXMuaW5zZXJ0QmVmb3JlKGEsdGhpcy5maXJzdENoaWxk KX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVu dE5vZGUpcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZhbHNlLGZ1bmN0 aW9uKGIpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYix0aGlzKX0pO2Vs c2UgaWYoYXJndW1lbnRzLmxlbmd0aCl7dmFyIGE9Yyhhcmd1bWVudHNbMF0pO2Eu cHVzaC5hcHBseShhLHRoaXMudG9BcnJheSgpKTtyZXR1cm4gdGhpcy5wdXNoU3Rh Y2soYSwiYmVmb3JlIixhcmd1bWVudHMpfX0sYWZ0ZXI6ZnVuY3Rpb24oKXtpZih0 aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpcmV0dXJuIHRoaXMuZG9tTWFuaXAo YXJndW1lbnRzLGZhbHNlLGZ1bmN0aW9uKGIpe3RoaXMucGFyZW50Tm9kZS5pbnNl cnRCZWZvcmUoYiwKdGhpcy5uZXh0U2libGluZyl9KTtlbHNlIGlmKGFyZ3VtZW50 cy5sZW5ndGgpe3ZhciBhPXRoaXMucHVzaFN0YWNrKHRoaXMsImFmdGVyIixhcmd1 bWVudHMpO2EucHVzaC5hcHBseShhLGMoYXJndW1lbnRzWzBdKS50b0FycmF5KCkp O3JldHVybiBhfX0scmVtb3ZlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBkPTAsZjso Zj10aGlzW2RdKSE9bnVsbDtkKyspaWYoIWF8fGMuZmlsdGVyKGEsW2ZdKS5sZW5n dGgpe2lmKCFiJiZmLm5vZGVUeXBlPT09MSl7Yy5jbGVhbkRhdGEoZi5nZXRFbGVt ZW50c0J5VGFnTmFtZSgiKiIpKTtjLmNsZWFuRGF0YShbZl0pfWYucGFyZW50Tm9k ZSYmZi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGYpfXJldHVybiB0aGlzfSxlbXB0 eTpmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGI7KGI9dGhpc1thXSkhPW51bGw7YSsr KWZvcihiLm5vZGVUeXBlPT09MSYmYy5jbGVhbkRhdGEoYi5nZXRFbGVtZW50c0J5 VGFnTmFtZSgiKiIpKTtiLmZpcnN0Q2hpbGQ7KWIucmVtb3ZlQ2hpbGQoYi5maXJz dENoaWxkKTsKcmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEpe3ZhciBiPXRo aXMubWFwKGZ1bmN0aW9uKCl7aWYoIWMuc3VwcG9ydC5ub0Nsb25lRXZlbnQmJiFj LmlzWE1MRG9jKHRoaXMpKXt2YXIgZD10aGlzLm91dGVySFRNTCxmPXRoaXMub3du ZXJEb2N1bWVudDtpZighZCl7ZD1mLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuYXBw ZW5kQ2hpbGQodGhpcy5jbG9uZU5vZGUodHJ1ZSkpO2Q9ZC5pbm5lckhUTUx9cmV0 dXJuIGMuY2xlYW4oW2QucmVwbGFjZShKYSwiIikucmVwbGFjZSgvPShbXj0iJz5c c10rXC8pPi9nLCc9IiQxIj4nKS5yZXBsYWNlKFYsIiIpXSxmKVswXX1lbHNlIHJl dHVybiB0aGlzLmNsb25lTm9kZSh0cnVlKX0pO2lmKGE9PT10cnVlKXtyYSh0aGlz LGIpO3JhKHRoaXMuZmluZCgiKiIpLGIuZmluZCgiKiIpKX1yZXR1cm4gYn0saHRt bDpmdW5jdGlvbihhKXtpZihhPT09dylyZXR1cm4gdGhpc1swXSYmdGhpc1swXS5u b2RlVHlwZT09PTE/dGhpc1swXS5pbm5lckhUTUwucmVwbGFjZShKYSwKIiIpOm51 bGw7ZWxzZSBpZih0eXBlb2YgYT09PSJzdHJpbmciJiYhdGEudGVzdChhKSYmKGMu c3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZXx8IVYudGVzdChhKSkmJiFGWyhMYS5l eGVjKGEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7YT1hLnJlcGxhY2Uo S2EsTWEpO3RyeXtmb3IodmFyIGI9MCxkPXRoaXMubGVuZ3RoO2I8ZDtiKyspaWYo dGhpc1tiXS5ub2RlVHlwZT09PTEpe2MuY2xlYW5EYXRhKHRoaXNbYl0uZ2V0RWxl bWVudHNCeVRhZ05hbWUoIioiKSk7dGhpc1tiXS5pbm5lckhUTUw9YX19Y2F0Y2go Zil7dGhpcy5lbXB0eSgpLmFwcGVuZChhKX19ZWxzZSBjLmlzRnVuY3Rpb24oYSk/ dGhpcy5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBqPWModGhpcyksaT1qLmh0bWwoKTtq LmVtcHR5KCkuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIGEuY2FsbCh0aGlzLGUs aSl9KX0pOnRoaXMuZW1wdHkoKS5hcHBlbmQoYSk7cmV0dXJuIHRoaXN9LHJlcGxh Y2VXaXRoOmZ1bmN0aW9uKGEpe2lmKHRoaXNbMF0mJgp0aGlzWzBdLnBhcmVudE5v ZGUpe2lmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9u KGIpe3ZhciBkPWModGhpcyksZj1kLmh0bWwoKTtkLnJlcGxhY2VXaXRoKGEuY2Fs bCh0aGlzLGIsZikpfSk7aWYodHlwZW9mIGEhPT0ic3RyaW5nIilhPWMoYSkuZGV0 YWNoKCk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPXRoaXMubmV4 dFNpYmxpbmcsZD10aGlzLnBhcmVudE5vZGU7Yyh0aGlzKS5yZW1vdmUoKTtiP2Mo YikuYmVmb3JlKGEpOmMoZCkuYXBwZW5kKGEpfSl9ZWxzZSByZXR1cm4gdGhpcy5w dXNoU3RhY2soYyhjLmlzRnVuY3Rpb24oYSk/YSgpOmEpLCJyZXBsYWNlV2l0aCIs YSl9LGRldGFjaDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZW1vdmUoYSx0cnVl KX0sZG9tTWFuaXA6ZnVuY3Rpb24oYSxiLGQpe2Z1bmN0aW9uIGYodSl7cmV0dXJu IGMubm9kZU5hbWUodSwidGFibGUiKT91LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0 Ym9keSIpWzBdfHwKdS5hcHBlbmRDaGlsZCh1Lm93bmVyRG9jdW1lbnQuY3JlYXRl RWxlbWVudCgidGJvZHkiKSk6dX12YXIgZSxqLGk9YVswXSxvPVtdLGs7aWYoIWMu c3VwcG9ydC5jaGVja0Nsb25lJiZhcmd1bWVudHMubGVuZ3RoPT09MyYmdHlwZW9m IGk9PT0ic3RyaW5nIiYmdWEudGVzdChpKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0 aW9uKCl7Yyh0aGlzKS5kb21NYW5pcChhLGIsZCx0cnVlKX0pO2lmKGMuaXNGdW5j dGlvbihpKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHUpe3ZhciB6PWModGhp cyk7YVswXT1pLmNhbGwodGhpcyx1LGI/ei5odG1sKCk6dyk7ei5kb21NYW5pcChh LGIsZCl9KTtpZih0aGlzWzBdKXtlPWkmJmkucGFyZW50Tm9kZTtlPWMuc3VwcG9y dC5wYXJlbnROb2RlJiZlJiZlLm5vZGVUeXBlPT09MTEmJmUuY2hpbGROb2Rlcy5s ZW5ndGg9PT10aGlzLmxlbmd0aD97ZnJhZ21lbnQ6ZX06c2EoYSx0aGlzLG8pO2s9 ZS5mcmFnbWVudDtpZihqPWsuY2hpbGROb2Rlcy5sZW5ndGg9PT0KMT8oaz1rLmZp cnN0Q2hpbGQpOmsuZmlyc3RDaGlsZCl7Yj1iJiZjLm5vZGVOYW1lKGosInRyIik7 Zm9yKHZhciBuPTAscj10aGlzLmxlbmd0aDtuPHI7bisrKWQuY2FsbChiP2YodGhp c1tuXSxqKTp0aGlzW25dLG4+MHx8ZS5jYWNoZWFibGV8fHRoaXMubGVuZ3RoPjE/ ay5jbG9uZU5vZGUodHJ1ZSk6ayl9by5sZW5ndGgmJmMuZWFjaChvLFFhKX1yZXR1 cm4gdGhpc319KTtjLmZyYWdtZW50cz17fTtjLmVhY2goe2FwcGVuZFRvOiJhcHBl bmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGlu c2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5j dGlvbihhLGIpe2MuZm5bYV09ZnVuY3Rpb24oZCl7dmFyIGY9W107ZD1jKGQpO3Zh ciBlPXRoaXMubGVuZ3RoPT09MSYmdGhpc1swXS5wYXJlbnROb2RlO2lmKGUmJmUu bm9kZVR5cGU9PT0xMSYmZS5jaGlsZE5vZGVzLmxlbmd0aD09PTEmJmQubGVuZ3Ro PT09MSl7ZFtiXSh0aGlzWzBdKTsKcmV0dXJuIHRoaXN9ZWxzZXtlPTA7Zm9yKHZh ciBqPWQubGVuZ3RoO2U8ajtlKyspe3ZhciBpPShlPjA/dGhpcy5jbG9uZSh0cnVl KTp0aGlzKS5nZXQoKTtjLmZuW2JdLmFwcGx5KGMoZFtlXSksaSk7Zj1mLmNvbmNh dChpKX1yZXR1cm4gdGhpcy5wdXNoU3RhY2soZixhLGQuc2VsZWN0b3IpfX19KTtj LmV4dGVuZCh7Y2xlYW46ZnVuY3Rpb24oYSxiLGQsZil7Yj1ifHxzO2lmKHR5cGVv ZiBiLmNyZWF0ZUVsZW1lbnQ9PT0idW5kZWZpbmVkIiliPWIub3duZXJEb2N1bWVu dHx8YlswXSYmYlswXS5vd25lckRvY3VtZW50fHxzO2Zvcih2YXIgZT1bXSxqPTAs aTsoaT1hW2pdKSE9bnVsbDtqKyspe2lmKHR5cGVvZiBpPT09Im51bWJlciIpaSs9 IiI7aWYoaSl7aWYodHlwZW9mIGk9PT0ic3RyaW5nIiYmIWpiLnRlc3QoaSkpaT1i LmNyZWF0ZVRleHROb2RlKGkpO2Vsc2UgaWYodHlwZW9mIGk9PT0ic3RyaW5nIil7 aT1pLnJlcGxhY2UoS2EsTWEpO3ZhciBvPShMYS5leGVjKGkpfHxbIiIsCiIiXSlb MV0udG9Mb3dlckNhc2UoKSxrPUZbb118fEYuX2RlZmF1bHQsbj1rWzBdLHI9Yi5j cmVhdGVFbGVtZW50KCJkaXYiKTtmb3Ioci5pbm5lckhUTUw9a1sxXStpK2tbMl07 bi0tOylyPXIubGFzdENoaWxkO2lmKCFjLnN1cHBvcnQudGJvZHkpe249aWIudGVz dChpKTtvPW89PT0idGFibGUiJiYhbj9yLmZpcnN0Q2hpbGQmJnIuZmlyc3RDaGls ZC5jaGlsZE5vZGVzOmtbMV09PT0iPHRhYmxlPiImJiFuP3IuY2hpbGROb2Rlczpb XTtmb3Ioaz1vLmxlbmd0aC0xO2s+PTA7LS1rKWMubm9kZU5hbWUob1trXSwidGJv ZHkiKSYmIW9ba10uY2hpbGROb2Rlcy5sZW5ndGgmJm9ba10ucGFyZW50Tm9kZS5y ZW1vdmVDaGlsZChvW2tdKX0hYy5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlJiZW LnRlc3QoaSkmJnIuaW5zZXJ0QmVmb3JlKGIuY3JlYXRlVGV4dE5vZGUoVi5leGVj KGkpWzBdKSxyLmZpcnN0Q2hpbGQpO2k9ci5jaGlsZE5vZGVzfWlmKGkubm9kZVR5 cGUpZS5wdXNoKGkpO2Vsc2UgZT0KYy5tZXJnZShlLGkpfX1pZihkKWZvcihqPTA7 ZVtqXTtqKyspaWYoZiYmYy5ub2RlTmFtZShlW2pdLCJzY3JpcHQiKSYmKCFlW2pd LnR5cGV8fGVbal0udHlwZS50b0xvd2VyQ2FzZSgpPT09InRleHQvamF2YXNjcmlw dCIpKWYucHVzaChlW2pdLnBhcmVudE5vZGU/ZVtqXS5wYXJlbnROb2RlLnJlbW92 ZUNoaWxkKGVbal0pOmVbal0pO2Vsc2V7ZVtqXS5ub2RlVHlwZT09PTEmJmUuc3Bs aWNlLmFwcGx5KGUsW2orMSwwXS5jb25jYXQoYy5tYWtlQXJyYXkoZVtqXS5nZXRF bGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IikpKSk7ZC5hcHBlbmRDaGlsZChlW2pd KX1yZXR1cm4gZX0sY2xlYW5EYXRhOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYixkLGY9 Yy5jYWNoZSxlPWMuZXZlbnQuc3BlY2lhbCxqPWMuc3VwcG9ydC5kZWxldGVFeHBh bmRvLGk9MCxvOyhvPWFbaV0pIT1udWxsO2krKylpZihkPW9bYy5leHBhbmRvXSl7 Yj1mW2RdO2lmKGIuZXZlbnRzKWZvcih2YXIgayBpbiBiLmV2ZW50cyllW2tdPwpj LmV2ZW50LnJlbW92ZShvLGspOkNhKG8sayxiLmhhbmRsZSk7aWYoailkZWxldGUg b1tjLmV4cGFuZG9dO2Vsc2Ugby5yZW1vdmVBdHRyaWJ1dGUmJm8ucmVtb3ZlQXR0 cmlidXRlKGMuZXhwYW5kbyk7ZGVsZXRlIGZbZF19fX0pO3ZhciBrYj0vei0/aW5k ZXh8Zm9udC0/d2VpZ2h0fG9wYWNpdHl8em9vbXxsaW5lLT9oZWlnaHQvaSxOYT0v YWxwaGFcKFteKV0qXCkvLE9hPS9vcGFjaXR5PShbXildKikvLGhhPS9mbG9hdC9p LGlhPS8tKFthLXpdKS9pZyxsYj0vKFtBLVpdKS9nLG1iPS9eLT9cZCsoPzpweCk/ JC9pLG5iPS9eLT9cZC8sb2I9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0 eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LHBiPVsiTGVmdCIsIlJpZ2h0Il0s cWI9WyJUb3AiLCJCb3R0b20iXSxyYj1zLmRlZmF1bHRWaWV3JiZzLmRlZmF1bHRW aWV3LmdldENvbXB1dGVkU3R5bGUsUGE9Yy5zdXBwb3J0LmNzc0Zsb2F0PyJjc3NG bG9hdCI6InN0eWxlRmxvYXQiLGphPQpmdW5jdGlvbihhLGIpe3JldHVybiBiLnRv VXBwZXJDYXNlKCl9O2MuZm4uY3NzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIFgodGhp cyxhLGIsdHJ1ZSxmdW5jdGlvbihkLGYsZSl7aWYoZT09PXcpcmV0dXJuIGMuY3Vy Q1NTKGQsZik7aWYodHlwZW9mIGU9PT0ibnVtYmVyIiYmIWtiLnRlc3QoZikpZSs9 InB4IjtjLnN0eWxlKGQsZixlKX0pfTtjLmV4dGVuZCh7c3R5bGU6ZnVuY3Rpb24o YSxiLGQpe2lmKCFhfHxhLm5vZGVUeXBlPT09M3x8YS5ub2RlVHlwZT09PTgpcmV0 dXJuIHc7aWYoKGI9PT0id2lkdGgifHxiPT09ImhlaWdodCIpJiZwYXJzZUZsb2F0 KGQpPDApZD13O3ZhciBmPWEuc3R5bGV8fGEsZT1kIT09dztpZighYy5zdXBwb3J0 Lm9wYWNpdHkmJmI9PT0ib3BhY2l0eSIpe2lmKGUpe2Yuem9vbT0xO2I9cGFyc2VJ bnQoZCwxMCkrIiI9PT0iTmFOIj8iIjoiYWxwaGEob3BhY2l0eT0iK2QqMTAwKyIp IjthPWYuZmlsdGVyfHxjLmN1ckNTUyhhLCJmaWx0ZXIiKXx8IiI7Zi5maWx0ZXI9 Ck5hLnRlc3QoYSk/YS5yZXBsYWNlKE5hLGIpOmJ9cmV0dXJuIGYuZmlsdGVyJiZm LmZpbHRlci5pbmRleE9mKCJvcGFjaXR5PSIpPj0wP3BhcnNlRmxvYXQoT2EuZXhl YyhmLmZpbHRlcilbMV0pLzEwMCsiIjoiIn1pZihoYS50ZXN0KGIpKWI9UGE7Yj1i LnJlcGxhY2UoaWEsamEpO2lmKGUpZltiXT1kO3JldHVybiBmW2JdfSxjc3M6ZnVu Y3Rpb24oYSxiLGQsZil7aWYoYj09PSJ3aWR0aCJ8fGI9PT0iaGVpZ2h0Iil7dmFy IGUsaj1iPT09IndpZHRoIj9wYjpxYjtmdW5jdGlvbiBpKCl7ZT1iPT09IndpZHRo Ij9hLm9mZnNldFdpZHRoOmEub2Zmc2V0SGVpZ2h0O2YhPT0iYm9yZGVyIiYmYy5l YWNoKGosZnVuY3Rpb24oKXtmfHwoZS09cGFyc2VGbG9hdChjLmN1ckNTUyhhLCJw YWRkaW5nIit0aGlzLHRydWUpKXx8MCk7aWYoZj09PSJtYXJnaW4iKWUrPXBhcnNl RmxvYXQoYy5jdXJDU1MoYSwibWFyZ2luIit0aGlzLHRydWUpKXx8MDtlbHNlIGUt PXBhcnNlRmxvYXQoYy5jdXJDU1MoYSwKImJvcmRlciIrdGhpcysiV2lkdGgiLHRy dWUpKXx8MH0pfWEub2Zmc2V0V2lkdGghPT0wP2koKTpjLnN3YXAoYSxvYixpKTty ZXR1cm4gTWF0aC5tYXgoMCxNYXRoLnJvdW5kKGUpKX1yZXR1cm4gYy5jdXJDU1Mo YSxiLGQpfSxjdXJDU1M6ZnVuY3Rpb24oYSxiLGQpe3ZhciBmLGU9YS5zdHlsZTtp ZighYy5zdXBwb3J0Lm9wYWNpdHkmJmI9PT0ib3BhY2l0eSImJmEuY3VycmVudFN0 eWxlKXtmPU9hLnRlc3QoYS5jdXJyZW50U3R5bGUuZmlsdGVyfHwiIik/cGFyc2VG bG9hdChSZWdFeHAuJDEpLzEwMCsiIjoiIjtyZXR1cm4gZj09PSIiPyIxIjpmfWlm KGhhLnRlc3QoYikpYj1QYTtpZighZCYmZSYmZVtiXSlmPWVbYl07ZWxzZSBpZihy Yil7aWYoaGEudGVzdChiKSliPSJmbG9hdCI7Yj1iLnJlcGxhY2UobGIsIi0kMSIp LnRvTG93ZXJDYXNlKCk7ZT1hLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7aWYo IWUpcmV0dXJuIG51bGw7aWYoYT1lLmdldENvbXB1dGVkU3R5bGUoYSxudWxsKSlm PQphLmdldFByb3BlcnR5VmFsdWUoYik7aWYoYj09PSJvcGFjaXR5IiYmZj09PSIi KWY9IjEifWVsc2UgaWYoYS5jdXJyZW50U3R5bGUpe2Q9Yi5yZXBsYWNlKGlhLGph KTtmPWEuY3VycmVudFN0eWxlW2JdfHxhLmN1cnJlbnRTdHlsZVtkXTtpZighbWIu dGVzdChmKSYmbmIudGVzdChmKSl7Yj1lLmxlZnQ7dmFyIGo9YS5ydW50aW1lU3R5 bGUubGVmdDthLnJ1bnRpbWVTdHlsZS5sZWZ0PWEuY3VycmVudFN0eWxlLmxlZnQ7 ZS5sZWZ0PWQ9PT0iZm9udFNpemUiPyIxZW0iOmZ8fDA7Zj1lLnBpeGVsTGVmdCsi cHgiO2UubGVmdD1iO2EucnVudGltZVN0eWxlLmxlZnQ9an19cmV0dXJuIGZ9LHN3 YXA6ZnVuY3Rpb24oYSxiLGQpe3ZhciBmPXt9O2Zvcih2YXIgZSBpbiBiKXtmW2Vd PWEuc3R5bGVbZV07YS5zdHlsZVtlXT1iW2VdfWQuY2FsbChhKTtmb3IoZSBpbiBi KWEuc3R5bGVbZV09ZltlXX19KTtpZihjLmV4cHImJmMuZXhwci5maWx0ZXJzKXtj LmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oYSl7dmFyIGI9CmEub2Zmc2V0 V2lkdGgsZD1hLm9mZnNldEhlaWdodCxmPWEubm9kZU5hbWUudG9Mb3dlckNhc2Uo KT09PSJ0ciI7cmV0dXJuIGI9PT0wJiZkPT09MCYmIWY/dHJ1ZTpiPjAmJmQ+MCYm IWY/ZmFsc2U6Yy5jdXJDU1MoYSwiZGlzcGxheSIpPT09Im5vbmUifTtjLmV4cHIu ZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiFjLmV4cHIuZmlsdGVy cy5oaWRkZW4oYSl9fXZhciBzYj1KKCksdGI9LzxzY3JpcHQoLnxccykqP1wvc2Ny aXB0Pi9naSx1Yj0vc2VsZWN0fHRleHRhcmVhL2ksdmI9L2NvbG9yfGRhdGV8ZGF0 ZXRpbWV8ZW1haWx8aGlkZGVufG1vbnRofG51bWJlcnxwYXNzd29yZHxyYW5nZXxz ZWFyY2h8dGVsfHRleHR8dGltZXx1cmx8d2Vlay9pLE49Lz1cPygmfCQpLyxrYT0v XD8vLHdiPS8oXD98JilfPS4qPygmfCQpLyx4Yj0vXihcdys6KT9cL1wvKFteXC8/ I10rKS8seWI9LyUyMC9nLHpiPWMuZm4ubG9hZDtjLmZuLmV4dGVuZCh7bG9hZDpm dW5jdGlvbihhLGIsZCl7aWYodHlwZW9mIGEhPT0KInN0cmluZyIpcmV0dXJuIHpi LmNhbGwodGhpcyxhKTtlbHNlIGlmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczt2 YXIgZj1hLmluZGV4T2YoIiAiKTtpZihmPj0wKXt2YXIgZT1hLnNsaWNlKGYsYS5s ZW5ndGgpO2E9YS5zbGljZSgwLGYpfWY9IkdFVCI7aWYoYilpZihjLmlzRnVuY3Rp b24oYikpe2Q9YjtiPW51bGx9ZWxzZSBpZih0eXBlb2YgYj09PSJvYmplY3QiKXti PWMucGFyYW0oYixjLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCk7Zj0iUE9TVCJ9 dmFyIGo9dGhpcztjLmFqYXgoe3VybDphLHR5cGU6ZixkYXRhVHlwZToiaHRtbCIs ZGF0YTpiLGNvbXBsZXRlOmZ1bmN0aW9uKGksbyl7aWYobz09PSJzdWNjZXNzInx8 bz09PSJub3Rtb2RpZmllZCIpai5odG1sKGU/YygiPGRpdiAvPiIpLmFwcGVuZChp LnJlc3BvbnNlVGV4dC5yZXBsYWNlKHRiLCIiKSkuZmluZChlKTppLnJlc3BvbnNl VGV4dCk7ZCYmai5lYWNoKGQsW2kucmVzcG9uc2VUZXh0LG8saV0pfX0pO3JldHVy biB0aGlzfSwKc2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIGMucGFyYW0odGhp cy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXty ZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cz9j Lm1ha2VBcnJheSh0aGlzLmVsZW1lbnRzKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9u KCl7cmV0dXJuIHRoaXMubmFtZSYmIXRoaXMuZGlzYWJsZWQmJih0aGlzLmNoZWNr ZWR8fHViLnRlc3QodGhpcy5ub2RlTmFtZSl8fHZiLnRlc3QodGhpcy50eXBlKSl9 KS5tYXAoZnVuY3Rpb24oYSxiKXthPWModGhpcykudmFsKCk7cmV0dXJuIGE9PW51 bGw/bnVsbDpjLmlzQXJyYXkoYSk/Yy5tYXAoYSxmdW5jdGlvbihkKXtyZXR1cm57 bmFtZTpiLm5hbWUsdmFsdWU6ZH19KTp7bmFtZTpiLm5hbWUsdmFsdWU6YX19KS5n ZXQoKX19KTtjLmVhY2goImFqYXhTdGFydCBhamF4U3RvcCBhamF4Q29tcGxldGUg YWpheEVycm9yIGFqYXhTdWNjZXNzIGFqYXhTZW5kIi5zcGxpdCgiICIpLApmdW5j dGlvbihhLGIpe2MuZm5bYl09ZnVuY3Rpb24oZCl7cmV0dXJuIHRoaXMuYmluZChi LGQpfX0pO2MuZXh0ZW5kKHtnZXQ6ZnVuY3Rpb24oYSxiLGQsZil7aWYoYy5pc0Z1 bmN0aW9uKGIpKXtmPWZ8fGQ7ZD1iO2I9bnVsbH1yZXR1cm4gYy5hamF4KHt0eXBl OiJHRVQiLHVybDphLGRhdGE6YixzdWNjZXNzOmQsZGF0YVR5cGU6Zn0pfSxnZXRT Y3JpcHQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYy5nZXQoYSxudWxsLGIsInNjcmlw dCIpfSxnZXRKU09OOmZ1bmN0aW9uKGEsYixkKXtyZXR1cm4gYy5nZXQoYSxiLGQs Impzb24iKX0scG9zdDpmdW5jdGlvbihhLGIsZCxmKXtpZihjLmlzRnVuY3Rpb24o Yikpe2Y9Znx8ZDtkPWI7Yj17fX1yZXR1cm4gYy5hamF4KHt0eXBlOiJQT1NUIix1 cmw6YSxkYXRhOmIsc3VjY2VzczpkLGRhdGFUeXBlOmZ9KX0sYWpheFNldHVwOmZ1 bmN0aW9uKGEpe2MuZXh0ZW5kKGMuYWpheFNldHRpbmdzLGEpfSxhamF4U2V0dGlu Z3M6e3VybDpsb2NhdGlvbi5ocmVmLApnbG9iYWw6dHJ1ZSx0eXBlOiJHRVQiLGNv bnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLHBy b2Nlc3NEYXRhOnRydWUsYXN5bmM6dHJ1ZSx4aHI6QS5YTUxIdHRwUmVxdWVzdCYm KEEubG9jYXRpb24ucHJvdG9jb2whPT0iZmlsZToifHwhQS5BY3RpdmVYT2JqZWN0 KT9mdW5jdGlvbigpe3JldHVybiBuZXcgQS5YTUxIdHRwUmVxdWVzdH06ZnVuY3Rp b24oKXt0cnl7cmV0dXJuIG5ldyBBLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5Y TUxIVFRQIil9Y2F0Y2goYSl7fX0sYWNjZXB0czp7eG1sOiJhcHBsaWNhdGlvbi94 bWwsIHRleHQveG1sIixodG1sOiJ0ZXh0L2h0bWwiLHNjcmlwdDoidGV4dC9qYXZh c2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Iixqc29uOiJhcHBsaWNhdGlv bi9qc29uLCB0ZXh0L2phdmFzY3JpcHQiLHRleHQ6InRleHQvcGxhaW4iLF9kZWZh dWx0OiIqLyoifX0sbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheDpmdW5jdGlv bihhKXtmdW5jdGlvbiBiKCl7ZS5zdWNjZXNzJiYKZS5zdWNjZXNzLmNhbGwoayxv LGkseCk7ZS5nbG9iYWwmJmYoImFqYXhTdWNjZXNzIixbeCxlXSl9ZnVuY3Rpb24g ZCgpe2UuY29tcGxldGUmJmUuY29tcGxldGUuY2FsbChrLHgsaSk7ZS5nbG9iYWwm JmYoImFqYXhDb21wbGV0ZSIsW3gsZV0pO2UuZ2xvYmFsJiYhLS1jLmFjdGl2ZSYm Yy5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpfWZ1bmN0aW9uIGYocSxwKXsoZS5j b250ZXh0P2MoZS5jb250ZXh0KTpjLmV2ZW50KS50cmlnZ2VyKHEscCl9dmFyIGU9 Yy5leHRlbmQodHJ1ZSx7fSxjLmFqYXhTZXR0aW5ncyxhKSxqLGksbyxrPWEmJmEu Y29udGV4dHx8ZSxuPWUudHlwZS50b1VwcGVyQ2FzZSgpO2lmKGUuZGF0YSYmZS5w cm9jZXNzRGF0YSYmdHlwZW9mIGUuZGF0YSE9PSJzdHJpbmciKWUuZGF0YT1jLnBh cmFtKGUuZGF0YSxlLnRyYWRpdGlvbmFsKTtpZihlLmRhdGFUeXBlPT09Impzb25w Iil7aWYobj09PSJHRVQiKU4udGVzdChlLnVybCl8fChlLnVybCs9KGthLnRlc3Qo ZS51cmwpPwoiJiI6Ij8iKSsoZS5qc29ucHx8ImNhbGxiYWNrIikrIj0/Iik7ZWxz ZSBpZighZS5kYXRhfHwhTi50ZXN0KGUuZGF0YSkpZS5kYXRhPShlLmRhdGE/ZS5k YXRhKyImIjoiIikrKGUuanNvbnB8fCJjYWxsYmFjayIpKyI9PyI7ZS5kYXRhVHlw ZT0ianNvbiJ9aWYoZS5kYXRhVHlwZT09PSJqc29uIiYmKGUuZGF0YSYmTi50ZXN0 KGUuZGF0YSl8fE4udGVzdChlLnVybCkpKXtqPWUuanNvbnBDYWxsYmFja3x8Impz b25wIitzYisrO2lmKGUuZGF0YSllLmRhdGE9KGUuZGF0YSsiIikucmVwbGFjZShO LCI9IitqKyIkMSIpO2UudXJsPWUudXJsLnJlcGxhY2UoTiwiPSIraisiJDEiKTtl LmRhdGFUeXBlPSJzY3JpcHQiO0Fbal09QVtqXXx8ZnVuY3Rpb24ocSl7bz1xO2Io KTtkKCk7QVtqXT13O3RyeXtkZWxldGUgQVtqXX1jYXRjaChwKXt9eiYmei5yZW1v dmVDaGlsZChDKX19aWYoZS5kYXRhVHlwZT09PSJzY3JpcHQiJiZlLmNhY2hlPT09 bnVsbCllLmNhY2hlPWZhbHNlO2lmKGUuY2FjaGU9PT0KZmFsc2UmJm49PT0iR0VU Iil7dmFyIHI9SigpLHU9ZS51cmwucmVwbGFjZSh3YiwiJDFfPSIrcisiJDIiKTtl LnVybD11Kyh1PT09ZS51cmw/KGthLnRlc3QoZS51cmwpPyImIjoiPyIpKyJfPSIr cjoiIil9aWYoZS5kYXRhJiZuPT09IkdFVCIpZS51cmwrPShrYS50ZXN0KGUudXJs KT8iJiI6Ij8iKStlLmRhdGE7ZS5nbG9iYWwmJiFjLmFjdGl2ZSsrJiZjLmV2ZW50 LnRyaWdnZXIoImFqYXhTdGFydCIpO3I9KHI9eGIuZXhlYyhlLnVybCkpJiYoclsx XSYmclsxXSE9PWxvY2F0aW9uLnByb3RvY29sfHxyWzJdIT09bG9jYXRpb24uaG9z dCk7aWYoZS5kYXRhVHlwZT09PSJzY3JpcHQiJiZuPT09IkdFVCImJnIpe3ZhciB6 PXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXXx8cy5kb2N1bWVudEVs ZW1lbnQsQz1zLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO0Muc3JjPWUudXJsO2lm KGUuc2NyaXB0Q2hhcnNldClDLmNoYXJzZXQ9ZS5zY3JpcHRDaGFyc2V0O2lmKCFq KXt2YXIgQj0KZmFsc2U7Qy5vbmxvYWQ9Qy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVu Y3Rpb24oKXtpZighQiYmKCF0aGlzLnJlYWR5U3RhdGV8fHRoaXMucmVhZHlTdGF0 ZT09PSJsb2FkZWQifHx0aGlzLnJlYWR5U3RhdGU9PT0iY29tcGxldGUiKSl7Qj10 cnVlO2IoKTtkKCk7Qy5vbmxvYWQ9Qy5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbDt6 JiZDLnBhcmVudE5vZGUmJnoucmVtb3ZlQ2hpbGQoQyl9fX16Lmluc2VydEJlZm9y ZShDLHouZmlyc3RDaGlsZCk7cmV0dXJuIHd9dmFyIEU9ZmFsc2UseD1lLnhocigp O2lmKHgpe2UudXNlcm5hbWU/eC5vcGVuKG4sZS51cmwsZS5hc3luYyxlLnVzZXJu YW1lLGUucGFzc3dvcmQpOngub3BlbihuLGUudXJsLGUuYXN5bmMpO3RyeXtpZihl LmRhdGF8fGEmJmEuY29udGVudFR5cGUpeC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250 ZW50LVR5cGUiLGUuY29udGVudFR5cGUpO2lmKGUuaWZNb2RpZmllZCl7Yy5sYXN0 TW9kaWZpZWRbZS51cmxdJiZ4LnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVk LVNpbmNlIiwKYy5sYXN0TW9kaWZpZWRbZS51cmxdKTtjLmV0YWdbZS51cmxdJiZ4 LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLGMuZXRhZ1tlLnVybF0p fXJ8fHguc2V0UmVxdWVzdEhlYWRlcigiWC1SZXF1ZXN0ZWQtV2l0aCIsIlhNTEh0 dHBSZXF1ZXN0Iik7eC5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLGUuZGF0YVR5 cGUmJmUuYWNjZXB0c1tlLmRhdGFUeXBlXT9lLmFjY2VwdHNbZS5kYXRhVHlwZV0r IiwgKi8qIjplLmFjY2VwdHMuX2RlZmF1bHQpfWNhdGNoKGdhKXt9aWYoZS5iZWZv cmVTZW5kJiZlLmJlZm9yZVNlbmQuY2FsbChrLHgsZSk9PT1mYWxzZSl7ZS5nbG9i YWwmJiEtLWMuYWN0aXZlJiZjLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIik7eC5h Ym9ydCgpO3JldHVybiBmYWxzZX1lLmdsb2JhbCYmZigiYWpheFNlbmQiLFt4LGVd KTt2YXIgZz14Lm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihxKXtpZigheHx8 eC5yZWFkeVN0YXRlPT09MHx8cT09PSJhYm9ydCIpe0V8fApkKCk7RT10cnVlO2lm KHgpeC5vbnJlYWR5c3RhdGVjaGFuZ2U9Yy5ub29wfWVsc2UgaWYoIUUmJngmJih4 LnJlYWR5U3RhdGU9PT00fHxxPT09InRpbWVvdXQiKSl7RT10cnVlO3gub25yZWFk eXN0YXRlY2hhbmdlPWMubm9vcDtpPXE9PT0idGltZW91dCI/InRpbWVvdXQiOiFj Lmh0dHBTdWNjZXNzKHgpPyJlcnJvciI6ZS5pZk1vZGlmaWVkJiZjLmh0dHBOb3RN b2RpZmllZCh4LGUudXJsKT8ibm90bW9kaWZpZWQiOiJzdWNjZXNzIjt2YXIgcDtp ZihpPT09InN1Y2Nlc3MiKXRyeXtvPWMuaHR0cERhdGEoeCxlLmRhdGFUeXBlLGUp fWNhdGNoKHYpe2k9InBhcnNlcmVycm9yIjtwPXZ9aWYoaT09PSJzdWNjZXNzInx8 aT09PSJub3Rtb2RpZmllZCIpanx8YigpO2Vsc2UgYy5oYW5kbGVFcnJvcihlLHgs aSxwKTtkKCk7cT09PSJ0aW1lb3V0IiYmeC5hYm9ydCgpO2lmKGUuYXN5bmMpeD1u dWxsfX07dHJ5e3ZhciBoPXguYWJvcnQ7eC5hYm9ydD1mdW5jdGlvbigpe3gmJmgu Y2FsbCh4KTsKZygiYWJvcnQiKX19Y2F0Y2gobCl7fWUuYXN5bmMmJmUudGltZW91 dD4wJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eCYmIUUmJmcoInRpbWVvdXQiKX0s ZS50aW1lb3V0KTt0cnl7eC5zZW5kKG49PT0iUE9TVCJ8fG49PT0iUFVUInx8bj09 PSJERUxFVEUiP2UuZGF0YTpudWxsKX1jYXRjaChtKXtjLmhhbmRsZUVycm9yKGUs eCxudWxsLG0pO2QoKX1lLmFzeW5jfHxnKCk7cmV0dXJuIHh9fSxoYW5kbGVFcnJv cjpmdW5jdGlvbihhLGIsZCxmKXtpZihhLmVycm9yKWEuZXJyb3IuY2FsbChhLmNv bnRleHR8fGEsYixkLGYpO2lmKGEuZ2xvYmFsKShhLmNvbnRleHQ/YyhhLmNvbnRl eHQpOmMuZXZlbnQpLnRyaWdnZXIoImFqYXhFcnJvciIsW2IsYSxmXSl9LGFjdGl2 ZTowLGh0dHBTdWNjZXNzOmZ1bmN0aW9uKGEpe3RyeXtyZXR1cm4hYS5zdGF0dXMm JmxvY2F0aW9uLnByb3RvY29sPT09ImZpbGU6Inx8YS5zdGF0dXM+PTIwMCYmYS5z dGF0dXM8MzAwfHxhLnN0YXR1cz09PTMwNHx8YS5zdGF0dXM9PT0KMTIyM3x8YS5z dGF0dXM9PT0wfWNhdGNoKGIpe31yZXR1cm4gZmFsc2V9LGh0dHBOb3RNb2RpZmll ZDpmdW5jdGlvbihhLGIpe3ZhciBkPWEuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3Qt TW9kaWZpZWQiKSxmPWEuZ2V0UmVzcG9uc2VIZWFkZXIoIkV0YWciKTtpZihkKWMu bGFzdE1vZGlmaWVkW2JdPWQ7aWYoZiljLmV0YWdbYl09ZjtyZXR1cm4gYS5zdGF0 dXM9PT0zMDR8fGEuc3RhdHVzPT09MH0saHR0cERhdGE6ZnVuY3Rpb24oYSxiLGQp e3ZhciBmPWEuZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIpfHwiIixl PWI9PT0ieG1sInx8IWImJmYuaW5kZXhPZigieG1sIik+PTA7YT1lP2EucmVzcG9u c2VYTUw6YS5yZXNwb25zZVRleHQ7ZSYmYS5kb2N1bWVudEVsZW1lbnQubm9kZU5h bWU9PT0icGFyc2VyZXJyb3IiJiZjLmVycm9yKCJwYXJzZXJlcnJvciIpO2lmKGQm JmQuZGF0YUZpbHRlcilhPWQuZGF0YUZpbHRlcihhLGIpO2lmKHR5cGVvZiBhPT09 InN0cmluZyIpaWYoYj09PQoianNvbiJ8fCFiJiZmLmluZGV4T2YoImpzb24iKT49 MClhPWMucGFyc2VKU09OKGEpO2Vsc2UgaWYoYj09PSJzY3JpcHQifHwhYiYmZi5p bmRleE9mKCJqYXZhc2NyaXB0Iik+PTApYy5nbG9iYWxFdmFsKGEpO3JldHVybiBh fSxwYXJhbTpmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGQoaSxvKXtpZihjLmlzQXJy YXkobykpYy5lYWNoKG8sZnVuY3Rpb24oayxuKXtifHwvXFtcXSQvLnRlc3QoaSk/ ZihpLG4pOmQoaSsiWyIrKHR5cGVvZiBuPT09Im9iamVjdCJ8fGMuaXNBcnJheShu KT9rOiIiKSsiXSIsbil9KTtlbHNlIWImJm8hPW51bGwmJnR5cGVvZiBvPT09Im9i amVjdCI/Yy5lYWNoKG8sZnVuY3Rpb24oayxuKXtkKGkrIlsiK2srIl0iLG4pfSk6 ZihpLG8pfWZ1bmN0aW9uIGYoaSxvKXtvPWMuaXNGdW5jdGlvbihvKT9vKCk6bztl W2UubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoaSkrIj0iK2VuY29kZVVSSUNv bXBvbmVudChvKX12YXIgZT1bXTtpZihiPT09dyliPWMuYWpheFNldHRpbmdzLnRy YWRpdGlvbmFsOwppZihjLmlzQXJyYXkoYSl8fGEuanF1ZXJ5KWMuZWFjaChhLGZ1 bmN0aW9uKCl7Zih0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcih2YXIg aiBpbiBhKWQoaixhW2pdKTtyZXR1cm4gZS5qb2luKCImIikucmVwbGFjZSh5Yiwi KyIpfX0pO3ZhciBsYT17fSxBYj0vdG9nZ2xlfHNob3d8aGlkZS8sQmI9L14oWyst XT0pPyhbXGQrLS5dKykoLiopJC8sVyx2YT1bWyJoZWlnaHQiLCJtYXJnaW5Ub3Ai LCJtYXJnaW5Cb3R0b20iLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSJdLFsi d2lkdGgiLCJtYXJnaW5MZWZ0IiwibWFyZ2luUmlnaHQiLCJwYWRkaW5nTGVmdCIs InBhZGRpbmdSaWdodCJdLFsib3BhY2l0eSJdXTtjLmZuLmV4dGVuZCh7c2hvdzpm dW5jdGlvbihhLGIpe2lmKGF8fGE9PT0wKXJldHVybiB0aGlzLmFuaW1hdGUoSygi c2hvdyIsMyksYSxiKTtlbHNle2E9MDtmb3IoYj10aGlzLmxlbmd0aDthPGI7YSsr KXt2YXIgZD1jLmRhdGEodGhpc1thXSwib2xkZGlzcGxheSIpOwp0aGlzW2FdLnN0 eWxlLmRpc3BsYXk9ZHx8IiI7aWYoYy5jc3ModGhpc1thXSwiZGlzcGxheSIpPT09 Im5vbmUiKXtkPXRoaXNbYV0ubm9kZU5hbWU7dmFyIGY7aWYobGFbZF0pZj1sYVtk XTtlbHNle3ZhciBlPWMoIjwiK2QrIiAvPiIpLmFwcGVuZFRvKCJib2R5Iik7Zj1l LmNzcygiZGlzcGxheSIpO2lmKGY9PT0ibm9uZSIpZj0iYmxvY2siO2UucmVtb3Zl KCk7bGFbZF09Zn1jLmRhdGEodGhpc1thXSwib2xkZGlzcGxheSIsZil9fWE9MDtm b3IoYj10aGlzLmxlbmd0aDthPGI7YSsrKXRoaXNbYV0uc3R5bGUuZGlzcGxheT1j LmRhdGEodGhpc1thXSwib2xkZGlzcGxheSIpfHwiIjtyZXR1cm4gdGhpc319LGhp ZGU6ZnVuY3Rpb24oYSxiKXtpZihhfHxhPT09MClyZXR1cm4gdGhpcy5hbmltYXRl KEsoImhpZGUiLDMpLGEsYik7ZWxzZXthPTA7Zm9yKGI9dGhpcy5sZW5ndGg7YTxi O2ErKyl7dmFyIGQ9Yy5kYXRhKHRoaXNbYV0sIm9sZGRpc3BsYXkiKTshZCYmZCE9 PSJub25lIiYmYy5kYXRhKHRoaXNbYV0sCiJvbGRkaXNwbGF5IixjLmNzcyh0aGlz W2FdLCJkaXNwbGF5IikpfWE9MDtmb3IoYj10aGlzLmxlbmd0aDthPGI7YSsrKXRo aXNbYV0uc3R5bGUuZGlzcGxheT0ibm9uZSI7cmV0dXJuIHRoaXN9fSxfdG9nZ2xl OmMuZm4udG9nZ2xlLHRvZ2dsZTpmdW5jdGlvbihhLGIpe3ZhciBkPXR5cGVvZiBh PT09ImJvb2xlYW4iO2lmKGMuaXNGdW5jdGlvbihhKSYmYy5pc0Z1bmN0aW9uKGIp KXRoaXMuX3RvZ2dsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZWxzZSBhPT1udWxs fHxkP3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBmPWQ/YTpjKHRoaXMpLmlzKCI6 aGlkZGVuIik7Yyh0aGlzKVtmPyJzaG93IjoiaGlkZSJdKCl9KTp0aGlzLmFuaW1h dGUoSygidG9nZ2xlIiwzKSxhLGIpO3JldHVybiB0aGlzfSxmYWRlVG86ZnVuY3Rp b24oYSxiLGQpe3JldHVybiB0aGlzLmZpbHRlcigiOmhpZGRlbiIpLmNzcygib3Bh Y2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6Yn0sYSxkKX0s CmFuaW1hdGU6ZnVuY3Rpb24oYSxiLGQsZil7dmFyIGU9Yy5zcGVlZChiLGQsZik7 aWYoYy5pc0VtcHR5T2JqZWN0KGEpKXJldHVybiB0aGlzLmVhY2goZS5jb21wbGV0 ZSk7cmV0dXJuIHRoaXNbZS5xdWV1ZT09PWZhbHNlPyJlYWNoIjoicXVldWUiXShm dW5jdGlvbigpe3ZhciBqPWMuZXh0ZW5kKHt9LGUpLGksbz10aGlzLm5vZGVUeXBl PT09MSYmYyh0aGlzKS5pcygiOmhpZGRlbiIpLGs9dGhpcztmb3IoaSBpbiBhKXt2 YXIgbj1pLnJlcGxhY2UoaWEsamEpO2lmKGkhPT1uKXthW25dPWFbaV07ZGVsZXRl IGFbaV07aT1ufWlmKGFbaV09PT0iaGlkZSImJm98fGFbaV09PT0ic2hvdyImJiFv KXJldHVybiBqLmNvbXBsZXRlLmNhbGwodGhpcyk7aWYoKGk9PT0iaGVpZ2h0Inx8 aT09PSJ3aWR0aCIpJiZ0aGlzLnN0eWxlKXtqLmRpc3BsYXk9Yy5jc3ModGhpcywi ZGlzcGxheSIpO2oub3ZlcmZsb3c9dGhpcy5zdHlsZS5vdmVyZmxvd31pZihjLmlz QXJyYXkoYVtpXSkpeyhqLnNwZWNpYWxFYXNpbmc9Cmouc3BlY2lhbEVhc2luZ3x8 e30pW2ldPWFbaV1bMV07YVtpXT1hW2ldWzBdfX1pZihqLm92ZXJmbG93IT1udWxs KXRoaXMuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiI7ai5jdXJBbmltPWMuZXh0ZW5k KHt9LGEpO2MuZWFjaChhLGZ1bmN0aW9uKHIsdSl7dmFyIHo9bmV3IGMuZngoayxq LHIpO2lmKEFiLnRlc3QodSkpelt1PT09InRvZ2dsZSI/bz8ic2hvdyI6ImhpZGUi OnVdKGEpO2Vsc2V7dmFyIEM9QmIuZXhlYyh1KSxCPXouY3VyKHRydWUpfHwwO2lm KEMpe3U9cGFyc2VGbG9hdChDWzJdKTt2YXIgRT1DWzNdfHwicHgiO2lmKEUhPT0i cHgiKXtrLnN0eWxlW3JdPSh1fHwxKStFO0I9KHV8fDEpL3ouY3VyKHRydWUpKkI7 ay5zdHlsZVtyXT1CK0V9aWYoQ1sxXSl1PShDWzFdPT09Ii09Ij8tMToxKSp1K0I7 ei5jdXN0b20oQix1LEUpfWVsc2Ugei5jdXN0b20oQix1LCIiKX19KTtyZXR1cm4g dHJ1ZX0pfSxzdG9wOmZ1bmN0aW9uKGEsYil7dmFyIGQ9Yy50aW1lcnM7YSYmdGhp cy5xdWV1ZShbXSk7CnRoaXMuZWFjaChmdW5jdGlvbigpe2Zvcih2YXIgZj1kLmxl bmd0aC0xO2Y+PTA7Zi0tKWlmKGRbZl0uZWxlbT09PXRoaXMpe2ImJmRbZl0odHJ1 ZSk7ZC5zcGxpY2UoZiwxKX19KTtifHx0aGlzLmRlcXVldWUoKTtyZXR1cm4gdGhp c319KTtjLmVhY2goe3NsaWRlRG93bjpLKCJzaG93IiwxKSxzbGlkZVVwOksoImhp ZGUiLDEpLHNsaWRlVG9nZ2xlOksoInRvZ2dsZSIsMSksZmFkZUluOntvcGFjaXR5 OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9fSxmdW5jdGlvbihhLGIp e2MuZm5bYV09ZnVuY3Rpb24oZCxmKXtyZXR1cm4gdGhpcy5hbmltYXRlKGIsZCxm KX19KTtjLmV4dGVuZCh7c3BlZWQ6ZnVuY3Rpb24oYSxiLGQpe3ZhciBmPWEmJnR5 cGVvZiBhPT09Im9iamVjdCI/YTp7Y29tcGxldGU6ZHx8IWQmJmJ8fGMuaXNGdW5j dGlvbihhKSYmYSxkdXJhdGlvbjphLGVhc2luZzpkJiZifHxiJiYhYy5pc0Z1bmN0 aW9uKGIpJiZifTtmLmR1cmF0aW9uPWMuZngub2ZmPzA6dHlwZW9mIGYuZHVyYXRp b249PT0KIm51bWJlciI/Zi5kdXJhdGlvbjpjLmZ4LnNwZWVkc1tmLmR1cmF0aW9u XXx8Yy5meC5zcGVlZHMuX2RlZmF1bHQ7Zi5vbGQ9Zi5jb21wbGV0ZTtmLmNvbXBs ZXRlPWZ1bmN0aW9uKCl7Zi5xdWV1ZSE9PWZhbHNlJiZjKHRoaXMpLmRlcXVldWUo KTtjLmlzRnVuY3Rpb24oZi5vbGQpJiZmLm9sZC5jYWxsKHRoaXMpfTtyZXR1cm4g Zn0sZWFzaW5nOntsaW5lYXI6ZnVuY3Rpb24oYSxiLGQsZil7cmV0dXJuIGQrZiph fSxzd2luZzpmdW5jdGlvbihhLGIsZCxmKXtyZXR1cm4oLU1hdGguY29zKGEqTWF0 aC5QSSkvMiswLjUpKmYrZH19LHRpbWVyczpbXSxmeDpmdW5jdGlvbihhLGIsZCl7 dGhpcy5vcHRpb25zPWI7dGhpcy5lbGVtPWE7dGhpcy5wcm9wPWQ7aWYoIWIub3Jp ZyliLm9yaWc9e319fSk7Yy5meC5wcm90b3R5cGU9e3VwZGF0ZTpmdW5jdGlvbigp e3RoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMu ZWxlbSx0aGlzLm5vdyx0aGlzKTsoYy5meC5zdGVwW3RoaXMucHJvcF18fApjLmZ4 LnN0ZXAuX2RlZmF1bHQpKHRoaXMpO2lmKCh0aGlzLnByb3A9PT0iaGVpZ2h0Inx8 dGhpcy5wcm9wPT09IndpZHRoIikmJnRoaXMuZWxlbS5zdHlsZSl0aGlzLmVsZW0u c3R5bGUuZGlzcGxheT0iYmxvY2sifSxjdXI6ZnVuY3Rpb24oYSl7aWYodGhpcy5l bGVtW3RoaXMucHJvcF0hPW51bGwmJighdGhpcy5lbGVtLnN0eWxlfHx0aGlzLmVs ZW0uc3R5bGVbdGhpcy5wcm9wXT09bnVsbCkpcmV0dXJuIHRoaXMuZWxlbVt0aGlz LnByb3BdO3JldHVybihhPXBhcnNlRmxvYXQoYy5jc3ModGhpcy5lbGVtLHRoaXMu cHJvcCxhKSkpJiZhPi0xMDAwMD9hOnBhcnNlRmxvYXQoYy5jdXJDU1ModGhpcy5l bGVtLHRoaXMucHJvcCkpfHwwfSxjdXN0b206ZnVuY3Rpb24oYSxiLGQpe2Z1bmN0 aW9uIGYoail7cmV0dXJuIGUuc3RlcChqKX10aGlzLnN0YXJ0VGltZT1KKCk7dGhp cy5zdGFydD1hO3RoaXMuZW5kPWI7dGhpcy51bml0PWR8fHRoaXMudW5pdHx8InB4 Ijt0aGlzLm5vdz10aGlzLnN0YXJ0Owp0aGlzLnBvcz10aGlzLnN0YXRlPTA7dmFy IGU9dGhpcztmLmVsZW09dGhpcy5lbGVtO2lmKGYoKSYmYy50aW1lcnMucHVzaChm KSYmIVcpVz1zZXRJbnRlcnZhbChjLmZ4LnRpY2ssMTMpfSxzaG93OmZ1bmN0aW9u KCl7dGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXT1jLnN0eWxlKHRoaXMuZWxl bSx0aGlzLnByb3ApO3RoaXMub3B0aW9ucy5zaG93PXRydWU7dGhpcy5jdXN0b20o dGhpcy5wcm9wPT09IndpZHRoInx8dGhpcy5wcm9wPT09ImhlaWdodCI/MTowLHRo aXMuY3VyKCkpO2ModGhpcy5lbGVtKS5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXt0 aGlzLm9wdGlvbnMub3JpZ1t0aGlzLnByb3BdPWMuc3R5bGUodGhpcy5lbGVtLHRo aXMucHJvcCk7dGhpcy5vcHRpb25zLmhpZGU9dHJ1ZTt0aGlzLmN1c3RvbSh0aGlz LmN1cigpLDApfSxzdGVwOmZ1bmN0aW9uKGEpe3ZhciBiPUooKSxkPXRydWU7aWYo YXx8Yj49dGhpcy5vcHRpb25zLmR1cmF0aW9uK3RoaXMuc3RhcnRUaW1lKXt0aGlz Lm5vdz0KdGhpcy5lbmQ7dGhpcy5wb3M9dGhpcy5zdGF0ZT0xO3RoaXMudXBkYXRl KCk7dGhpcy5vcHRpb25zLmN1ckFuaW1bdGhpcy5wcm9wXT10cnVlO2Zvcih2YXIg ZiBpbiB0aGlzLm9wdGlvbnMuY3VyQW5pbSlpZih0aGlzLm9wdGlvbnMuY3VyQW5p bVtmXSE9PXRydWUpZD1mYWxzZTtpZihkKXtpZih0aGlzLm9wdGlvbnMuZGlzcGxh eSE9bnVsbCl7dGhpcy5lbGVtLnN0eWxlLm92ZXJmbG93PXRoaXMub3B0aW9ucy5v dmVyZmxvdzthPWMuZGF0YSh0aGlzLmVsZW0sIm9sZGRpc3BsYXkiKTt0aGlzLmVs ZW0uc3R5bGUuZGlzcGxheT1hP2E6dGhpcy5vcHRpb25zLmRpc3BsYXk7aWYoYy5j c3ModGhpcy5lbGVtLCJkaXNwbGF5Iik9PT0ibm9uZSIpdGhpcy5lbGVtLnN0eWxl LmRpc3BsYXk9ImJsb2NrIn10aGlzLm9wdGlvbnMuaGlkZSYmYyh0aGlzLmVsZW0p LmhpZGUoKTtpZih0aGlzLm9wdGlvbnMuaGlkZXx8dGhpcy5vcHRpb25zLnNob3cp Zm9yKHZhciBlIGluIHRoaXMub3B0aW9ucy5jdXJBbmltKWMuc3R5bGUodGhpcy5l bGVtLAplLHRoaXMub3B0aW9ucy5vcmlnW2VdKTt0aGlzLm9wdGlvbnMuY29tcGxl dGUuY2FsbCh0aGlzLmVsZW0pfXJldHVybiBmYWxzZX1lbHNle2U9Yi10aGlzLnN0 YXJ0VGltZTt0aGlzLnN0YXRlPWUvdGhpcy5vcHRpb25zLmR1cmF0aW9uO2E9dGhp cy5vcHRpb25zLmVhc2luZ3x8KGMuZWFzaW5nLnN3aW5nPyJzd2luZyI6ImxpbmVh ciIpO3RoaXMucG9zPWMuZWFzaW5nW3RoaXMub3B0aW9ucy5zcGVjaWFsRWFzaW5n JiZ0aGlzLm9wdGlvbnMuc3BlY2lhbEVhc2luZ1t0aGlzLnByb3BdfHxhXSh0aGlz LnN0YXRlLGUsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik7dGhpcy5ub3c9dGhp cy5zdGFydCsodGhpcy5lbmQtdGhpcy5zdGFydCkqdGhpcy5wb3M7dGhpcy51cGRh dGUoKX1yZXR1cm4gdHJ1ZX19O2MuZXh0ZW5kKGMuZngse3RpY2s6ZnVuY3Rpb24o KXtmb3IodmFyIGE9Yy50aW1lcnMsYj0wO2I8YS5sZW5ndGg7YisrKWFbYl0oKXx8 YS5zcGxpY2UoYi0tLDEpO2EubGVuZ3RofHwKYy5meC5zdG9wKCl9LHN0b3A6ZnVu Y3Rpb24oKXtjbGVhckludGVydmFsKFcpO1c9bnVsbH0sc3BlZWRzOntzbG93OjYw MCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LHN0ZXA6e29wYWNpdHk6ZnVuY3Rpb24o YSl7Yy5zdHlsZShhLmVsZW0sIm9wYWNpdHkiLGEubm93KX0sX2RlZmF1bHQ6ZnVu Y3Rpb24oYSl7aWYoYS5lbGVtLnN0eWxlJiZhLmVsZW0uc3R5bGVbYS5wcm9wXSE9 bnVsbClhLmVsZW0uc3R5bGVbYS5wcm9wXT0oYS5wcm9wPT09IndpZHRoInx8YS5w cm9wPT09ImhlaWdodCI/TWF0aC5tYXgoMCxhLm5vdyk6YS5ub3cpK2EudW5pdDtl bHNlIGEuZWxlbVthLnByb3BdPWEubm93fX19KTtpZihjLmV4cHImJmMuZXhwci5m aWx0ZXJzKWMuZXhwci5maWx0ZXJzLmFuaW1hdGVkPWZ1bmN0aW9uKGEpe3JldHVy biBjLmdyZXAoYy50aW1lcnMsZnVuY3Rpb24oYil7cmV0dXJuIGE9PT1iLmVsZW19 KS5sZW5ndGh9O2MuZm4ub2Zmc2V0PSJnZXRCb3VuZGluZ0NsaWVudFJlY3QiaW4g cy5kb2N1bWVudEVsZW1lbnQ/CmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF07aWYo YSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe2Mub2Zmc2V0LnNldE9mZnNl dCh0aGlzLGEsZSl9KTtpZighYnx8IWIub3duZXJEb2N1bWVudClyZXR1cm4gbnVs bDtpZihiPT09Yi5vd25lckRvY3VtZW50LmJvZHkpcmV0dXJuIGMub2Zmc2V0LmJv ZHlPZmZzZXQoYik7dmFyIGQ9Yi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxmPWIu b3duZXJEb2N1bWVudDtiPWYuYm9keTtmPWYuZG9jdW1lbnRFbGVtZW50O3JldHVy bnt0b3A6ZC50b3ArKHNlbGYucGFnZVlPZmZzZXR8fGMuc3VwcG9ydC5ib3hNb2Rl bCYmZi5zY3JvbGxUb3B8fGIuc2Nyb2xsVG9wKS0oZi5jbGllbnRUb3B8fGIuY2xp ZW50VG9wfHwwKSxsZWZ0OmQubGVmdCsoc2VsZi5wYWdlWE9mZnNldHx8Yy5zdXBw b3J0LmJveE1vZGVsJiZmLnNjcm9sbExlZnR8fGIuc2Nyb2xsTGVmdCktKGYuY2xp ZW50TGVmdHx8Yi5jbGllbnRMZWZ0fHwwKX19OmZ1bmN0aW9uKGEpe3ZhciBiPQp0 aGlzWzBdO2lmKGEpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihyKXtjLm9mZnNl dC5zZXRPZmZzZXQodGhpcyxhLHIpfSk7aWYoIWJ8fCFiLm93bmVyRG9jdW1lbnQp cmV0dXJuIG51bGw7aWYoYj09PWIub3duZXJEb2N1bWVudC5ib2R5KXJldHVybiBj Lm9mZnNldC5ib2R5T2Zmc2V0KGIpO2Mub2Zmc2V0LmluaXRpYWxpemUoKTt2YXIg ZD1iLm9mZnNldFBhcmVudCxmPWIsZT1iLm93bmVyRG9jdW1lbnQsaixpPWUuZG9j dW1lbnRFbGVtZW50LG89ZS5ib2R5O2Y9KGU9ZS5kZWZhdWx0Vmlldyk/ZS5nZXRD b21wdXRlZFN0eWxlKGIsbnVsbCk6Yi5jdXJyZW50U3R5bGU7Zm9yKHZhciBrPWIu b2Zmc2V0VG9wLG49Yi5vZmZzZXRMZWZ0OyhiPWIucGFyZW50Tm9kZSkmJmIhPT1v JiZiIT09aTspe2lmKGMub2Zmc2V0LnN1cHBvcnRzRml4ZWRQb3NpdGlvbiYmZi5w b3NpdGlvbj09PSJmaXhlZCIpYnJlYWs7aj1lP2UuZ2V0Q29tcHV0ZWRTdHlsZShi LG51bGwpOmIuY3VycmVudFN0eWxlOwprLT1iLnNjcm9sbFRvcDtuLT1iLnNjcm9s bExlZnQ7aWYoYj09PWQpe2srPWIub2Zmc2V0VG9wO24rPWIub2Zmc2V0TGVmdDtp ZihjLm9mZnNldC5kb2VzTm90QWRkQm9yZGVyJiYhKGMub2Zmc2V0LmRvZXNBZGRC b3JkZXJGb3JUYWJsZUFuZENlbGxzJiYvXnQoYWJsZXxkfGgpJC9pLnRlc3QoYi5u b2RlTmFtZSkpKXtrKz1wYXJzZUZsb2F0KGouYm9yZGVyVG9wV2lkdGgpfHwwO24r PXBhcnNlRmxvYXQoai5ib3JkZXJMZWZ0V2lkdGgpfHwwfWY9ZDtkPWIub2Zmc2V0 UGFyZW50fWlmKGMub2Zmc2V0LnN1YnRyYWN0c0JvcmRlckZvck92ZXJmbG93Tm90 VmlzaWJsZSYmai5vdmVyZmxvdyE9PSJ2aXNpYmxlIil7ays9cGFyc2VGbG9hdChq LmJvcmRlclRvcFdpZHRoKXx8MDtuKz1wYXJzZUZsb2F0KGouYm9yZGVyTGVmdFdp ZHRoKXx8MH1mPWp9aWYoZi5wb3NpdGlvbj09PSJyZWxhdGl2ZSJ8fGYucG9zaXRp b249PT0ic3RhdGljIil7ays9by5vZmZzZXRUb3A7bis9by5vZmZzZXRMZWZ0fWlm KGMub2Zmc2V0LnN1cHBvcnRzRml4ZWRQb3NpdGlvbiYmCmYucG9zaXRpb249PT0i Zml4ZWQiKXtrKz1NYXRoLm1heChpLnNjcm9sbFRvcCxvLnNjcm9sbFRvcCk7bis9 TWF0aC5tYXgoaS5zY3JvbGxMZWZ0LG8uc2Nyb2xsTGVmdCl9cmV0dXJue3RvcDpr LGxlZnQ6bn19O2Mub2Zmc2V0PXtpbml0aWFsaXplOmZ1bmN0aW9uKCl7dmFyIGE9 cy5ib2R5LGI9cy5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLGYsZSxqPXBhcnNlRmxv YXQoYy5jdXJDU1MoYSwibWFyZ2luVG9wIix0cnVlKSl8fDA7Yy5leHRlbmQoYi5z dHlsZSx7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsbWFyZ2luOjAs Ym9yZGVyOjAsd2lkdGg6IjFweCIsaGVpZ2h0OiIxcHgiLHZpc2liaWxpdHk6Imhp ZGRlbiJ9KTtiLmlubmVySFRNTD0iPGRpdiBzdHlsZT0ncG9zaXRpb246YWJzb2x1 dGU7dG9wOjA7bGVmdDowO21hcmdpbjowO2JvcmRlcjo1cHggc29saWQgIzAwMDtw YWRkaW5nOjA7d2lkdGg6MXB4O2hlaWdodDoxcHg7Jz48ZGl2PjwvZGl2PjwvZGl2 Pjx0YWJsZSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO21h cmdpbjowO2JvcmRlcjo1cHggc29saWQgIzAwMDtwYWRkaW5nOjA7d2lkdGg6MXB4 O2hlaWdodDoxcHg7JyBjZWxscGFkZGluZz0nMCcgY2VsbHNwYWNpbmc9JzAnPjx0 cj48dGQ+PC90ZD48L3RyPjwvdGFibGU+IjsKYS5pbnNlcnRCZWZvcmUoYixhLmZp cnN0Q2hpbGQpO2Q9Yi5maXJzdENoaWxkO2Y9ZC5maXJzdENoaWxkO2U9ZC5uZXh0 U2libGluZy5maXJzdENoaWxkLmZpcnN0Q2hpbGQ7dGhpcy5kb2VzTm90QWRkQm9y ZGVyPWYub2Zmc2V0VG9wIT09NTt0aGlzLmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFu ZENlbGxzPWUub2Zmc2V0VG9wPT09NTtmLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCI7 Zi5zdHlsZS50b3A9IjIwcHgiO3RoaXMuc3VwcG9ydHNGaXhlZFBvc2l0aW9uPWYu b2Zmc2V0VG9wPT09MjB8fGYub2Zmc2V0VG9wPT09MTU7Zi5zdHlsZS5wb3NpdGlv bj1mLnN0eWxlLnRvcD0iIjtkLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iO2Quc3R5 bGUucG9zaXRpb249InJlbGF0aXZlIjt0aGlzLnN1YnRyYWN0c0JvcmRlckZvck92 ZXJmbG93Tm90VmlzaWJsZT1mLm9mZnNldFRvcD09PS01O3RoaXMuZG9lc05vdElu Y2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQ9YS5vZmZzZXRUb3AhPT1qO2EucmVtb3Zl Q2hpbGQoYik7CmMub2Zmc2V0LmluaXRpYWxpemU9Yy5ub29wfSxib2R5T2Zmc2V0 OmZ1bmN0aW9uKGEpe3ZhciBiPWEub2Zmc2V0VG9wLGQ9YS5vZmZzZXRMZWZ0O2Mu b2Zmc2V0LmluaXRpYWxpemUoKTtpZihjLm9mZnNldC5kb2VzTm90SW5jbHVkZU1h cmdpbkluQm9keU9mZnNldCl7Yis9cGFyc2VGbG9hdChjLmN1ckNTUyhhLCJtYXJn aW5Ub3AiLHRydWUpKXx8MDtkKz1wYXJzZUZsb2F0KGMuY3VyQ1NTKGEsIm1hcmdp bkxlZnQiLHRydWUpKXx8MH1yZXR1cm57dG9wOmIsbGVmdDpkfX0sc2V0T2Zmc2V0 OmZ1bmN0aW9uKGEsYixkKXtpZigvc3RhdGljLy50ZXN0KGMuY3VyQ1NTKGEsInBv c2l0aW9uIikpKWEuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIjt2YXIgZj1jKGEp LGU9Zi5vZmZzZXQoKSxqPXBhcnNlSW50KGMuY3VyQ1NTKGEsInRvcCIsdHJ1ZSks MTApfHwwLGk9cGFyc2VJbnQoYy5jdXJDU1MoYSwibGVmdCIsdHJ1ZSksMTApfHww O2lmKGMuaXNGdW5jdGlvbihiKSliPWIuY2FsbChhLApkLGUpO2Q9e3RvcDpiLnRv cC1lLnRvcCtqLGxlZnQ6Yi5sZWZ0LWUubGVmdCtpfTsidXNpbmciaW4gYj9iLnVz aW5nLmNhbGwoYSxkKTpmLmNzcyhkKX19O2MuZm4uZXh0ZW5kKHtwb3NpdGlvbjpm dW5jdGlvbigpe2lmKCF0aGlzWzBdKXJldHVybiBudWxsO3ZhciBhPXRoaXNbMF0s Yj10aGlzLm9mZnNldFBhcmVudCgpLGQ9dGhpcy5vZmZzZXQoKSxmPS9eYm9keXxo dG1sJC9pLnRlc3QoYlswXS5ub2RlTmFtZSk/e3RvcDowLGxlZnQ6MH06Yi5vZmZz ZXQoKTtkLnRvcC09cGFyc2VGbG9hdChjLmN1ckNTUyhhLCJtYXJnaW5Ub3AiLHRy dWUpKXx8MDtkLmxlZnQtPXBhcnNlRmxvYXQoYy5jdXJDU1MoYSwibWFyZ2luTGVm dCIsdHJ1ZSkpfHwwO2YudG9wKz1wYXJzZUZsb2F0KGMuY3VyQ1NTKGJbMF0sImJv cmRlclRvcFdpZHRoIix0cnVlKSl8fDA7Zi5sZWZ0Kz1wYXJzZUZsb2F0KGMuY3Vy Q1NTKGJbMF0sImJvcmRlckxlZnRXaWR0aCIsdHJ1ZSkpfHwwO3JldHVybnt0b3A6 ZC50b3AtCmYudG9wLGxlZnQ6ZC5sZWZ0LWYubGVmdH19LG9mZnNldFBhcmVudDpm dW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe2Zvcih2YXIgYT10 aGlzLm9mZnNldFBhcmVudHx8cy5ib2R5O2EmJiEvXmJvZHl8aHRtbCQvaS50ZXN0 KGEubm9kZU5hbWUpJiZjLmNzcyhhLCJwb3NpdGlvbiIpPT09InN0YXRpYyI7KWE9 YS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGF9KX19KTtjLmVhY2goWyJMZWZ0IiwiVG9w Il0sZnVuY3Rpb24oYSxiKXt2YXIgZD0ic2Nyb2xsIitiO2MuZm5bZF09ZnVuY3Rp b24oZil7dmFyIGU9dGhpc1swXSxqO2lmKCFlKXJldHVybiBudWxsO2lmKGYhPT13 KXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZihqPXdhKHRoaXMpKWouc2Ny b2xsVG8oIWE/ZjpjKGopLnNjcm9sbExlZnQoKSxhP2Y6YyhqKS5zY3JvbGxUb3Ao KSk7ZWxzZSB0aGlzW2RdPWZ9KTtlbHNlIHJldHVybihqPXdhKGUpKT8icGFnZVhP ZmZzZXQiaW4gaj9qW2E/InBhZ2VZT2Zmc2V0IjoKInBhZ2VYT2Zmc2V0Il06Yy5z dXBwb3J0LmJveE1vZGVsJiZqLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtkXXx8 ai5kb2N1bWVudC5ib2R5W2RdOmVbZF19fSk7Yy5lYWNoKFsiSGVpZ2h0IiwiV2lk dGgiXSxmdW5jdGlvbihhLGIpe3ZhciBkPWIudG9Mb3dlckNhc2UoKTtjLmZuWyJp bm5lciIrYl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1swXT9jLmNzcyh0aGlzWzBd LGQsZmFsc2UsInBhZGRpbmciKTpudWxsfTtjLmZuWyJvdXRlciIrYl09ZnVuY3Rp b24oZil7cmV0dXJuIHRoaXNbMF0/Yy5jc3ModGhpc1swXSxkLGZhbHNlLGY/Im1h cmdpbiI6ImJvcmRlciIpOm51bGx9O2MuZm5bZF09ZnVuY3Rpb24oZil7dmFyIGU9 dGhpc1swXTtpZighZSlyZXR1cm4gZj09bnVsbD9udWxsOnRoaXM7aWYoYy5pc0Z1 bmN0aW9uKGYpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oail7dmFyIGk9Yyh0 aGlzKTtpW2RdKGYuY2FsbCh0aGlzLGosaVtkXSgpKSl9KTtyZXR1cm4ic2Nyb2xs VG8iaW4KZSYmZS5kb2N1bWVudD9lLmRvY3VtZW50LmNvbXBhdE1vZGU9PT0iQ1NT MUNvbXBhdCImJmUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2Jd fHxlLmRvY3VtZW50LmJvZHlbImNsaWVudCIrYl06ZS5ub2RlVHlwZT09PTk/TWF0 aC5tYXgoZS5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrYl0sZS5ib2R5WyJzY3Jv bGwiK2JdLGUuZG9jdW1lbnRFbGVtZW50WyJzY3JvbGwiK2JdLGUuYm9keVsib2Zm c2V0IitiXSxlLmRvY3VtZW50RWxlbWVudFsib2Zmc2V0IitiXSk6Zj09PXc/Yy5j c3MoZSxkKTp0aGlzLmNzcyhkLHR5cGVvZiBmPT09InN0cmluZyI/ZjpmKyJweCIp fX0pO0EualF1ZXJ5PUEuJD1jfSkod2luZG93KTsK ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline; filename=base.js Content-Type: application/x-javascript; charset=utf-8; name=base.js Content-Location: http://bop.diba.es/js/base.js Content-Transfer-Encoding: Base64 77u/JChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7DQoJLy8NCgkvLyBQdWJs aWMgOiBQb3J0YWRhIDogTG9naW4NCgkvLw0KCSQoIiN1aWQiKS5ibHVyKGZ1bmN0 aW9uKCkgew0KCQlpZiAoJCgiI3VpZCIpLnZhbCgpID09ICIiKSB7DQoJCQlpZigk KCIjbGFuZyIpLnZhbCgpID09ICJDQSIpDQoJCQkJJCgiI3VpZCIpLnZhbCgiTklG IG8gY29kaSBkJ3VzdWFyaSIpOw0KCQkJZWxzZQ0KCQkJCSQoIiN1aWQiKS52YWwo Ik5JRiBvIGPDs2RpZ28gZGUgdXN1YXJpbyIpOw0KCQl9DQoJfSk7DQoJJCgiI3Vp ZCIpLmZvY3VzKGZ1bmN0aW9uKCkgew0KCQlpZiAoJCgiI3VpZCIpLnZhbCgpLnN1 YnN0cmluZygwLDYpID09ICJOSUYgbyAiKSB7DQoJCQkkKCIjdWlkIikudmFsKCIi KTsNCgkJfQ0KCX0pOw0KDQoJJCgiI3B3ZCIpLmJsdXIoZnVuY3Rpb24oKSB7DQoJ CWlmICgkKCIjcHdkIikudmFsKCkgPT0gIiIpIHsNCgkJCSQoIiNwd2QiKS5oaWRl KCk7DQoJCQkkKCIjZmFrZXB3ZCIpLnNob3coKTsNCgkJfQ0KCX0pOw0KCSQoIiNm YWtlcHdkIikuZm9jdXMoZnVuY3Rpb24oKSB7DQoJCSQoIiNmYWtlcHdkIikuaGlk ZSgpOw0KCQkkKCIjcHdkIikuc2hvdygpOw0KCQkkKCIjcHdkIikuZm9jdXMoKTsN Cgl9KTsNCgkNCgkvLw0KCS8vICBQdWJsaWMvUHJpdmF0ZSA6IFBvcnRhZGEgOiBF c3RhdCBkZSBsJ2FudW5jaQ0KCS8vDQoJJCgiI3JlZyIpLmJsdXIoZnVuY3Rpb24o KSB7DQoJCWlmICgkKCIjcmVnIikudmFsKCkgPT0gIiIpIHsNCgkJCWlmKCQoIiNs YW5nIikudmFsKCkgPT0gIkNBIikNCgkJCQkkKCIjcmVnIikudmFsKCJOw7ptLiBy ZWdpc3RyZSBlbGVjdHLDsm5pYyIpOw0KCQkJZWxzZQ0KCQkJCSQoIiNyZWciKS52 YWwoIk7Dum0uIHJlZ2lzdHJvIGVsZWN0csOzbmljbyIpOw0KCQl9DQoJfSk7DQoJ DQoJJCgiI3JlZyIpLmZvY3VzKGZ1bmN0aW9uKCkgew0KCQlpZiAoJCgiI3JlZyIp LnZhbCgpLnN1YnN0cmluZygwLDgpID09ICJOw7ptLiByZWciKSB7DQoJCQkkKCIj cmVnIikudmFsKCIiKTsNCgkJfQ0KCX0pOw0KCQ0KCS8vDQoJLy8gIFB1YmxpYy9Q cml2YXRlIDogUG9ydGFkYSA6IFBhZ2FtZW50IGVuIGxpbmlhDQoJLy8NCgkkKCIj cmVmIikuYmx1cihmdW5jdGlvbigpIHsNCgkJaWYgKCQoIiNyZWYiKS52YWwoKSA9 PSAiIikgew0KCQkJaWYoJCgiI2xhbmciKS52YWwoKSA9PSAiQ0EiKQ0KCQkJCSQo IiNyZWYiKS52YWwoIk7Dum0uIGRlIHJlZmVyw6huY2lhIik7DQoJCQllbHNlDQoJ CQkJJCgiI3JlZiIpLnZhbCgiTsO6bS4gZGUgcmVmZXJlbmNpYSIpOw0KCQl9DQoJ fSk7DQoNCgkkKCIjcmVmIikuZm9jdXMoZnVuY3Rpb24oKSB7DQoJCWlmICgkKCIj cmVmIikudmFsKCkuc3Vic3RyaW5nKDAsOCkgPT0gIk7Dum0uIGRlICIpIHsNCgkJ CSQoIiNyZWYiKS52YWwoIiIpOw0KCQl9DQoJfSk7DQoJDQoJLy8NCgkvLyAgUHVi bGljIDogUG9ydGFkYSA6IFZlcmlmaWNhY2nDsyBlbGVjdHLDs25pY2EgZGUgbGEg cHVibGljYWNpw7MNCgkvLw0KCSQoIiNudW1fcmVnaXN0cmUiKS5ibHVyKGZ1bmN0 aW9uKCkgew0KCQlpZiAoJCgiI251bV9yZWdpc3RyZSIpLnZhbCgpID09ICIiKSB7 DQoJCQlpZigkKCIjbGFuZyIpLnZhbCgpID09ICJDQSIpDQoJCQkJJCgiI251bV9y ZWdpc3RyZSIpLnZhbCgiTsO6bS4gZGUgcmVnaXN0cmUiKTsNCgkJCWVsc2UNCgkJ CQkkKCIjbnVtX3JlZ2lzdHJlIikudmFsKCJOw7ptLiBkZSByZWdpc3RybyIpOw0K CQl9DQoJfSk7DQoNCgkkKCIjbnVtX3JlZ2lzdHJlIikuZm9jdXMoZnVuY3Rpb24o KSB7DQoJCWlmICgkKCIjbnVtX3JlZ2lzdHJlIikudmFsKCkuc3Vic3RyaW5nKDAs OCkgPT0gIk7Dum0uIGRlICIpIHsNCgkJCSQoIiNudW1fcmVnaXN0cmUiKS52YWwo IiIpOw0KCQl9DQoJfSk7DQoJDQoJLy8NCgkvLyBQcml2YXRlIDogUG9ydGFkYSA6 IEVzdGF0IGRlIGwnYW51bmNpDQoJLy8NCgkvKiB0ZW5pbSBkaXZlcnNvcyBpbnB1 dHMgI3JlZyBkaWZlcmVudHMgcGVyIGwnYXBsaWNhY2nDsw0KCSQoIiNyZWciKS5i bHVyKGZ1bmN0aW9uKCkgew0KCQlpZiAoJCgiI3JlZyIpLnZhbCgpID09ICIiKSB7 DQoJCQlpZigkKCIjbGFuZyIpLnZhbCgpID09ICJDQSIpDQoJCQkJJCgiI3JlZyIp LnZhbCgiTsO6bS4gZGUgcmVnaXN0cmUiKTsNCgkJCWVsc2UNCgkJCQkkKCIjcmVn IikudmFsKCJOw7ptLiBkZSByZWdpc3RybyIpOw0KCQl9DQoJfSk7DQoJKi8NCg0K CSQoIiNyZWciKS5mb2N1cyhmdW5jdGlvbigpIHsNCgkJaWYgKCQoIiNyZWciKS52 YWwoKS5zdWJzdHJpbmcoMCw1KSA9PSAiTsO6bS4gIikgew0KCQkJJCgiI3JlZyIp LnZhbCgiIik7DQoJCX0NCgl9KTsNCgkJCQ0KICAgIC8vDQogICAgLy8gIE1vc3Ry YXIgcmFkaW9zIGRlIGJ1c3F1ZWRhIHJhcGlkYQ0KICAgIC8vDQogICAgJCgiI3Jh ZGlvcyIpLnRvZ2dsZSgpOw0KICAgIC8vDQogICAgLy8gIFkgb2N1bHRhciBsb3Mg aWNvbm9zIGRlIHN1Ym1pdA0KICAgIC8vDQogICAgJCgic2VsZWN0W25hbWU9J3Vu YyddIikubmV4dCgpLmhpZGUoKTsNCiAgICAvLw0KICAgIC8vICBFbnZpbyBhdXRv bWF0aWNvIGRlIGJ1c3F1ZWRhIHJhcGlkYQ0KICAgIC8vDQogICAgJCgiLmNvbWJv Y2VyY2FyYXBpZGEiKS5jaGFuZ2UoZnVuY3Rpb24oKSB7DQogICAgICAgIGlmICgk KHRoaXMpLnZhbCgpICE9ICIiKSB7DQogICAgICAgICAgICAkKCJpbnB1dFt0eXBl PSdoaWRkZW4nXVtuYW1lPSd0VU5DJ10iKS52YWwoJCh0aGlzKS52YWwoKSk7DQog ICAgICAgICAgICAkKCIjY2VyY2FfcmFwaWRhIikuc3VibWl0KCk7DQogICAgICAg IH0NCiAgICB9KTsNCiAgICAkKCIuYnRucmFwaWRhIikuY2xpY2soZnVuY3Rpb24o KSB7DQogICAgICAgICQoImlucHV0W3R5cGU9J2hpZGRlbiddW25hbWU9J3RVTkMn XSIpLnZhbCgkKHRoaXMpLnByZXYoKS52YWwoKSk7DQogICAgICAgICQoIiNjZXJj YV9yYXBpZGEiKS5zdWJtaXQoKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAg IH0pOw0KDQoNCiAgICAkKCIuY29tYm9jZXJjYXN1YmxldmVsIikuY2hhbmdlKGZ1 bmN0aW9uKCkgew0KICAgICAgICBpZiAoJCh0aGlzKS52YWwoKSAhPSAiIikgew0K ICAgICAgICAgICAgJCgiI2NlcmNhX3JhcGlkYSIpLnN1Ym1pdCgpOw0KICAgICAg ICB9DQogICAgfSk7DQoNCiAgICAkKCIuY29tYm9jZXJjYWF2YW5jYWRhIikuY2hh bmdlKGZ1bmN0aW9uKCkgew0KICAgICAgICAkKCIjY2VyY2EiKS5zdWJtaXQoKTsN CiAgICB9KTsNCgkNCiAgICAkKCIuY29tYm9EU0kiKS5jaGFuZ2UoZnVuY3Rpb24o KSB7DQogICAgICAgICQoIiNhbHRhIikuc3VibWl0KCk7DQogICAgfSk7DQoNCiAg ICAvLyAgICAkKCJpbnB1dFt0eXBlPSdzdWJtaXQnXSIpLmNsaWNrKGZ1bmN0aW9u KCkgew0KICAgIC8vICAgICAgICAkKHRoaXMpLmF0dHIoJ2Rpc2FibGVkJywgdHJ1 ZSk7DQogICAgLy8gICAgfSk7DQoJDQoJLy8NCgkvLyAgU2VsZWN0IEFudW5jaWFu dHM6IGdyYW5kYXJpYSBkaW5hbWljYQ0KCS8vDQoJJCgiI2VzY29sbGlyX2FudW5j aWFudCAjYW51bmNpYW50IikubW91c2Vkb3duKCBmdW5jdGlvbigpIHsNCgkJdmFy IG1heExlbmd0aCA9IDA7DQoJCSQoIiNlc2NvbGxpcl9hbnVuY2lhbnQgI2FudW5j aWFudCBvcHRpb24iKS5lYWNoKCBmdW5jdGlvbigpIHsNCgkJCWlmKCAkKHRoaXMp LnRleHQoKS5sZW5ndGggPiBtYXhMZW5ndGggKQ0KCQkJCW1heExlbmd0aCA9ICQo dGhpcykudGV4dCgpLmxlbmd0aDsNCgkJfSk7DQoJCWlmKCBtYXhMZW5ndGgqMTAg PCAyMDAgKSBtYXhMZW5ndGggPSAnMjAwJzsNCgkJJCgiI2VzY29sbGlyX2FudW5j aWFudCAjYW51bmNpYW50IikuY3NzKCd3aWR0aCcsbWF4TGVuZ3RoKjEwKTsNCgl9 ICk7DQoJJCgiI2VzY29sbGlyX2FudW5jaWFudCAjYW51bmNpYW50IikuYmx1cigg ZnVuY3Rpb24oKSB7DQoJCSQoIiNlc2NvbGxpcl9hbnVuY2lhbnQgI2FudW5jaWFu dCIpLmNzcygnd2lkdGgnLCcyMDAnKTsNCgl9ICk7DQoJDQoJLy8NCgkvLyAgU2Vs ZWN0IEFudW5jaWFudHM6IGNsaWMgYWN0aXUNCgkvLw0KCSQoIiNlc2NvbGxpcl9h bnVuY2lhbnQgI2FudW5jaWFudCIpLmNoYW5nZSggZnVuY3Rpb24oKSB7DQoJCSQo IiNlc2NvbGxpcl9hbnVuY2lhbnQgI2FudW5jaWFudCIpLmNzcygnd2lkdGgnLCcy MDAnKTsgLy8gcGVyIGEgcXVlIG5vIGVzIHZlZ2kgZ3JhbiBtZW50cmUgZmEgZWwg c3VibWl0DQoJCSQoIiNlc2NvbGxpcl9hbnVuY2lhbnQiKS5zdWJtaXQoKTsNCgl9 KTsNCgkNCgkvLyBSZWNlcmNhIFJlc3VsdGF0czogU2VndWltZW50cyBlbiBhbHRy ZXMgYnV0bGxldGlucw0KCQ0KCSQoIi5saW5rU2VndWltZW50cyIpLmNsaWNrKCBm dW5jdGlvbigpIHsNCgkJdmFyIG5yZWcgPSAkKHRoaXMpLmF0dHIoImlkIikuc3Bs aXQoIl8iKVsxXTsNCgkJdmFyIGNvbnRpbmd1dElkID0gIiNsaW5rU2VndWltZW50 c19jb250aW5ndXRfIitucmVnOw0KCQl2YXIgaW1nTG9hZGluZyA9ICIjbGlua1Nl Z3VpbWVudHNfaW1nX2xvYWRpbmdfIitucmVnOw0KCQlpZiAoICQoY29udGluZ3V0 SWQpLmlzKCI6aGlkZGVuIikgKSB7DQoJCQkkKGltZ0xvYWRpbmcpLnNob3coKTsN CgkJCSQuZ2V0KCJhamF4LmFzcCIsIHsgJ2YnOiAnb2J0ZW5lcnNlZ3VpbWVudHMn LCAnbnJlZyc6IG5yZWcgfSwNCgkJCQlmdW5jdGlvbihodG1sKSB7DQoJCQkJCWlm KCBodG1sLmxlbmd0aCA9PSAwICkNCgkJCQkJCWFsZXJ0KCJFcnJvcjogbm8gcydo YSB0cm9iYXQgY2FwIGVubGxhw6cgZGUgc2VndWltZW50Iik7DQoJCQkJCWVsc2Ug aWYoIGh0bWwuc3Vic3RyKDAsNCkgPT0gImh0dHAiICkgew0KCQkJCQkJd2luZG93 Lm9wZW4oIGh0bWwgKTsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJCSQoY29udGluZ3V0 SWQpLmFwcGVuZCggaHRtbCApOw0KCQkJCQkJJChjb250aW5ndXRJZCkuc2hvdygp Ow0KCQkJCQkJLy8kKGNvbnRpbmd1dElkKS5zbGlkZURvd24oInNsb3ciKTsNCgkJ CQkJfQ0KCQkJCQkkKGltZ0xvYWRpbmcpLmhpZGUoKTsNCgkJCX0pOw0KCQl9IGVs c2Ugew0KCQkJLy8kKGNvbnRpbmd1dElkKS5oaWRlKCk7DQoJCQkkKGNvbnRpbmd1 dElkKS5zbGlkZVVwKCJzbG93Iik7DQoJCQkkKGNvbnRpbmd1dElkKS5lbXB0eSgp Ow0KCQl9DQoJfSk7DQoNCiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgIEZVTkNJT05BTElE QURFUyBJTlNFUkNJT04gQU5VTkNJTw0KICAgICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KCQ0KICAg ICQoImlucHV0W25hbWU9J3RwdWJsaWNhY2lvJ10iKS5jbGljayhmdW5jdGlvbigp IHsNCg0KICAgICAgICB2YXIgdiA9ICQodGhpcykudmFsKCk7DQoNCgkJJCgiI2Rh dGFwdWJfbyIpLmhpZGUoKTsNCgkJJCgiI2RhdGFwdWJfZSIpLmhpZGUoKTsgJCgi I21zZ190YXJpZmFfZSIpLmhpZGUoKTsNCgkJJCgiI2RhdGFwdWJfdSIpLmhpZGUo KTsNCgkJJCgiI2ZlY2hhcHVibGljYWNpb24iKS5hdHRyKCJkaXNhYmxlIiwgInRy dWUiKTsNCgkJJCgiI2ZlY2hhcHVibGljYWNpb24iKS5kYXRlcGlja2VyKCdkaXNh YmxlJyk7DQoJCSQoIiNmZWNoYXB1YmxpY2FjaW9uIikuaGlkZSgpOw0KCQkkKCIj bXNnX3RhcmlmYV9wIikuaGlkZSgpOw0KCQkNCgkJc3dpdGNoICh2KSB7DQoJCQlj YXNlICJPIjoNCgkJCQkkKCIjZGF0YXB1Yl9vIikuc2hvdygpOw0KCQkJCWJyZWFr Ow0KCQkJY2FzZSAiRSI6DQoJCQkJJCgiI2RhdGFwdWJfZSIpLnNob3coKTsNCgkJ CQkkKCIjbXNnX3RhcmlmYV9lIikuc2hvdygpOw0KCQkJCWJyZWFrOw0KCQkJY2Fz ZSAiVSI6DQoJCQkJJCgiI2RhdGFwdWJfdSIpLnNob3coKTsNCgkJCQlicmVhazsN CgkJCWNhc2UgIlAiOg0KCQkJCSQoIiNmZWNoYXB1YmxpY2FjaW9uIikuYXR0cigi ZGlzYWJsZSIsICJmYWxzZSIpOw0KCQkJCSQoIiNmZWNoYXB1YmxpY2FjaW9uIiku ZGF0ZXBpY2tlcignZW5hYmxlJyk7DQoJCQkJJCgiI2ZlY2hhcHVibGljYWNpb24i KS5zaG93KCk7DQoJCQkJLy9pZiggJCgiI2ZlY2hhcHVibGljYWNpb24iKS52YWwo KSE9IiIgJiYgJCgiI2ZlY2hhcHVibGljYWNpb24iKS52YWwoKSE9ImRkL21tL2Fh YWEiICkgew0KCQkJCWlmKCAkKCIjZmVjaGFwdWJsaWNhY2lvbiIpLnZhbCgpIT0i IiApIHsNCgkJCQkJZGF0YUF1eCA9ICQoIiNmZWNoYXB1YmxpY2FjaW9uIikudmFs KCkuc3BsaXQoIi8iKTsNCgkJCQkJZGF0YVByZWNpc2FtZW50ID0gbmV3IERhdGUo ZGF0YUF1eFsyXSxkYXRhQXV4WzFdLTEsZGF0YUF1eFswXSk7DQoJCQkJCWRhdGFB dXggPSAkKCIjbXNnX3RhcmlmYV9wX2RhdGFsaW1pdCIpLnZhbCgpLnNwbGl0KCIv Iik7DQoJCQkJCWRhdGFMaW1pdCA9ICBuZXcgRGF0ZShkYXRhQXV4WzJdLGRhdGFB dXhbMF0tMSxkYXRhQXV4WzFdKTsNCgkJCQkJaWYoIGRhdGFQcmVjaXNhbWVudCA8 IGRhdGFMaW1pdCApDQoJCQkJCQkkKCIjbXNnX3RhcmlmYV9wIikuc2hvdygpOw0K CQkJCX0NCgkJCQlicmVhazsNCgkJfQ0KICAgIH0pOw0KCQ0KCSQoIiNmZWNoYXB1 YmxpY2FjaW9uIikuY2hhbmdlKGZ1bmN0aW9uKCkgew0KCQkvL2lmKCAkKCIjZmVj aGFwdWJsaWNhY2lvbiIpLnZhbCgpIT0iIiAmJiAkKCIjZmVjaGFwdWJsaWNhY2lv biIpLnZhbCgpIT0iZGQvbW0vYWFhYSIgKSB7DQoJCWlmKCAkKCIjZmVjaGFwdWJs aWNhY2lvbiIpLnZhbCgpIT0iIiApIHsNCgkJCWRhdGFBdXggPSAkKCIjZmVjaGFw dWJsaWNhY2lvbiIpLnZhbCgpLnNwbGl0KCIvIik7DQoJCQlkYXRhUHJlY2lzYW1l bnQgPSBuZXcgRGF0ZShkYXRhQXV4WzJdLGRhdGFBdXhbMV0tMSxkYXRhQXV4WzBd KTsNCgkJCWRhdGFBdXggPSAkKCIjbXNnX3RhcmlmYV9wX2RhdGFsaW1pdCIpLnZh bCgpLnNwbGl0KCIvIik7DQoJCQlkYXRhTGltaXQgPSAgbmV3IERhdGUoZGF0YUF1 eFsyXSxkYXRhQXV4WzBdLTEsZGF0YUF1eFsxXSk7DQoJCQlpZiggZGF0YVByZWNp c2FtZW50IDwgZGF0YUxpbWl0ICkNCgkJCQkkKCIjbXNnX3RhcmlmYV9wIikuc2hv dygpOw0KCQkJZWxzZQ0KCQkJCSQoIiNtc2dfdGFyaWZhX3AiKS5oaWRlKCk7DQoJ CX0NCgl9KTsNCg0KICAgICQoImlucHV0W25hbWU9J3Rub3RpZmljYWNpbyddIiku Y2xpY2soZnVuY3Rpb24oKSB7DQoNCiAgICAgICAgdmFyIHYgPSAkKHRoaXMpLnZh bCgpOw0KDQogICAgICAgIGlmICh2ID09ICJDIikgew0KICAgICAgICAgICAgJCgi I2RhdGFfY2l0YWNpbyIpLmF0dHIoImRpc2FibGUiLCAiZmFsc2UiKTsNCiAgICAg ICAgICAgICQoIiNkYXRhX2NpdGFjaW8iKS5kYXRlcGlja2VyKCdlbmFibGUnKTsN CgkJCSQoIiNkYXRhX2NpdGFjaW8iKS5zaG93KCk7DQoNCiAgICAgICAgICAgICQo IiNkYXRhX3N1Ymhhc3RhIikuYXR0cigiZGlzYWJsZSIsICJ0cnVlIik7DQogICAg ICAgICAgICAkKCIjZGF0YV9zdWJoYXN0YSIpLmRhdGVwaWNrZXIoJ2Rpc2FibGUn KTsNCiAgICAgICAgICAgICQoIiNkYXRhX3N1Ymhhc3RhIikuaGlkZSgpOw0KICAg ICAgICB9IGVsc2UgaWYgKHYgPT0gIlUiKSB7DQogICAgICAgICAgICAkKCIjZGF0 YV9zdWJoYXN0YSIpLmF0dHIoImRpc2FibGUiLCAiZmFsc2UiKTsNCiAgICAgICAg ICAgICQoIiNkYXRhX3N1Ymhhc3RhIikuZGF0ZXBpY2tlcignZW5hYmxlJyk7DQog ICAgICAgICAgICAkKCIjZGF0YV9zdWJoYXN0YSIpLnNob3coKTsNCg0KICAgICAg ICAgICAgJCgiI2RhdGFfY2l0YWNpbyIpLmF0dHIoImRpc2FibGUiLCAidHJ1ZSIp Ow0KICAgICAgICAgICAgJCgiI2RhdGFfY2l0YWNpbyIpLmRhdGVwaWNrZXIoJ2Rp c2FibGUnKTsNCiAgICAgICAgICAgICQoIiNkYXRhX2NpdGFjaW8iKS5oaWRlKCk7 DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkKCIjZGF0YV9zdWJoYXN0 YSIpLmF0dHIoImRpc2FibGUiLCAidHJ1ZSIpOw0KICAgICAgICAgICAgJCgiI2Rh dGFfc3ViaGFzdGEiKS5kYXRlcGlja2VyKCdkaXNhYmxlJyk7DQoJCQkkKCIjZGF0 YV9zdWJoYXN0YSIpLmhpZGUoKTsNCg0KICAgICAgICAgICAgJCgiI2RhdGFfY2l0 YWNpbyIpLmF0dHIoImRpc2FibGUiLCAidHJ1ZSIpOw0KICAgICAgICAgICAgJCgi I2RhdGFfY2l0YWNpbyIpLmRhdGVwaWNrZXIoJ2Rpc2FibGUnKTsNCgkJCSQoIiNk YXRhX2NpdGFjaW8iKS5oaWRlKCk7DQogICAgICAgIH0NCiAgICB9KTsNCg0KICAg ICQoIiN0eHQiKS5jbGljayhmdW5jdGlvbigpIHsNCiAgICAgICAgJCgiI3RleHRv X2FudW5jaW8iKS5zaG93KCk7DQogICAgICAgICQoIiNkYXRvc19maWNoZXJvIiku aGlkZSgpOw0KICAgIH0pOw0KDQogICAgJCgiI2ZpdHgiKS5jbGljayhmdW5jdGlv bigpIHsNCiAgICAgICAgJCgiI3RleHRvX2FudW5jaW8iKS5oaWRlKCk7DQogICAg ICAgICQoIiNkYXRvc19maWNoZXJvIikuc2hvdygpOw0KICAgIH0pOw0KDQogICAg JCgiI2NwX3BlcnNvbmEiKS5jaGFuZ2UoZnVuY3Rpb24oKSB7DQogICAgICAgIGlm ICgkKHRoaXMpLnZhbCgpID09ICIiKSB7DQogICAgICAgICAgICAkKCIjcG9ibGFj aW9uX3NwIikudmFsKCIiKTsNCiAgICAgICAgICAgICQoIiNwcm92aW5jaWFfc3Ai KS52YWwoIiIpOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAg ICAgJCgiI3BvYmxfcGVyc29uYSIpLmF0dHIoJ2Rpc2FibGVkJywgdHJ1ZSk7DQog ICAgICAgICAgICAkKCIjcHJvdmluY2lhX3NwIikuYXR0cignZGlzYWJsZWQnLCB0 cnVlKTsNCiAgICAgICAgICAgICQuZ2V0KCJhamF4LmFzcCIsIHsgJ2YnOiAnb2J0 ZW5lcnBvYmxhY2lvbicsICdjcCc6ICQodGhpcykudmFsKCkgfSwgZnVuY3Rpb24o aHRtbCkgew0KICAgICAgICAgICAgICAgIGlmIChodG1sICE9ICcnKSB7DQogICAg ICAgICAgICAgICAgICAgIGRhdGEgPSBodG1sLnNwbGl0KCJ8Iik7DQogICAgICAg ICAgICAgICAgICAgICQoIiNwb2JsX3BlcnNvbmEiKS52YWwoZGF0YVswXSk7DQog ICAgICAgICAgICAgICAgICAgICQoIiNwcm92aW5jaWFfc3AiKS52YWwoZGF0YVsx XSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICQoIiNwb2Js X3BlcnNvbmEiKS5hdHRyKCdkaXNhYmxlZCcsIGZhbHNlKTsNCiAgICAgICAgICAg ICAgICAkKCIjcHJvdmluY2lhX3NwIikuYXR0cignZGlzYWJsZWQnLCBmYWxzZSk7 DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgIH0pOw0KDQogICAgJCgi I2NtYkFudW5jaWFudCIpLmNoYW5nZShmdW5jdGlvbigpIHsNCiAgICAgICAgc3dp dGNoICgkKHRoaXMpLnZhbCgpKSB7DQogICAgICAgICAgICBjYXNlICctMSc6DQog ICAgICAgICAgICAgICAgJCgiI2FsdHJlX3NydiIpLnNob3coKTsNCiAgICAgICAg ICAgICAgICAkKCIjYWx0cmVfanV0amF0IikuaGlkZSgpOw0KICAgICAgICAgICAg ICAgICQoIiNjb2RpX3NlcnZlaSIpLnZhbCgkKHRoaXMpLnZhbCgpKTsNCiAgICAg ICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJy0yJzoNCiAgICAg ICAgICAgICAgICAkKCIjY29tYm9zanV6Z2Fkb3MiKS5jaGlsZHJlbigpLnJlbW92 ZSgpOw0KICAgICAgICAgICAgICAgICQoIiNjYXJnYW5kbyIpLnNob3coKTsNCiAg ICAgICAgICAgICAgICAkLmdldCgiYWpheC5hc3AiLCB7ICdmJzogJ2J1c2Nhcmp1 emdhZG9zJywgJ25pdmVsJzogJzInLCAndmFsb3Jlcyc6ICcnLCAnaWRpb21hJzog J0MnIH0sIGZ1bmN0aW9uKGh0bWwpIHsNCiAgICAgICAgICAgICAgICAgICAgJCgi I2NvbWJvc2p1emdhZG9zIikuYXBwZW5kKGh0bWwpOw0KICAgICAgICAgICAgICAg ICAgICAkKCIjY2FyZ2FuZG8iKS5oaWRlKCk7DQogICAgICAgICAgICAgICAgfSk7 DQoNCiAgICAgICAgICAgICAgICAkKCIjYWx0cmVfc3J2IikuaGlkZSgpOw0KICAg ICAgICAgICAgICAgICQoIiNhbHRyZV9qdXRqYXQiKS5zaG93KCk7DQoNCiAgICAg ICAgICAgICAgICAkKCIjc2VydmVpIikudmFsKCQoJyNjbWJBbnVuY2lhbnQgOnNl bGVjdGVkJykudGV4dCgpKTsNCiAgICAgICAgICAgICAgICAkKCIjY29kaV9zZXJ2 ZWkiKS52YWwoJCh0aGlzKS52YWwoKSk7DQogICAgICAgICAgICAgICAgYnJlYWs7 DQogICAgICAgICAgICBjYXNlICcwJzoNCiAgICAgICAgICAgICAgICAkKCIjYWx0 cmVfc3J2IikuaGlkZSgpOw0KICAgICAgICAgICAgICAgICQoIiNhbHRyZV9qdXRq YXQiKS5oaWRlKCk7DQoNCiAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAg ICAgICAgJCgiI2FsdHJlX3NydiIpLmhpZGUoKTsNCiAgICAgICAgICAgICAgICAk KCIjYWx0cmVfanV0amF0IikuaGlkZSgpOw0KDQogICAgICAgICAgICAgICAgJCgi I3NlcnZlaSIpLnZhbCgkKCcjY21iQW51bmNpYW50IDpzZWxlY3RlZCcpLnRleHQo KSk7DQogICAgICAgICAgICAgICAgJCgiI2NvZGlfc2VydmVpIikudmFsKCQodGhp cykudmFsKCkpOw0KICAgICAgICB9DQogICAgfSk7DQogICAgLy8NCiAgICAvLyAg Q2FyZ2EgZGluYW1pY2EgZGUgbGEgamVyYXJxdWlhIGRlIGp1emdhZG9zDQogICAg Ly8NCiAgICAkKCIuY21iSnV0amF0IikubGl2ZSgiY2hhbmdlIiwgZnVuY3Rpb24o ZXZlbnQpIHsNCiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7DQoNCiAg ICAgICAgJCh0aGlzKS5uZXh0QWxsKCkucmVtb3ZlKCk7DQoNCiAgICAgICAgdmFy IGRhdGEgPSAkKHRoaXMpLnZhbCgpLnNwbGl0KCJ8Iik7DQogICAgICAgIHZhciBp ZCA9IHRoaXMuaWQ7DQoNCiAgICAgICAgaWYgKGRhdGFbMl0gPT0gIjEiKSB7DQog ICAgICAgICAgICAvLyAgQ2FyZ2FyIG90cm8gbml2ZWwNCiAgICAgICAgICAgICQo IiNjYXJnYW5kbyIpLnNob3coKTsNCiAgICAgICAgICAgIG5pdmVsID0gaWQuc3Vi c3RyKGlkLmxlbmd0aCAtIDEpOw0KICAgICAgICAgICAgJC5nZXQoImFqYXguYXNw IiwgeyAnZic6ICdidXNjYXJqdXpnYWRvcycsICduaXZlbCc6IG5pdmVsLCAndmFs b3Jlcyc6IGRhdGFbMV0sICdpZGlvbWEnOiAnQycgfSwgZnVuY3Rpb24oaHRtbCkg ew0KICAgICAgICAgICAgICAgICQoIiNjYXJnYW5kbyIpLmhpZGUoKTsNCiAgICAg ICAgICAgICAgICAkKCIjY29tYm9zanV6Z2Fkb3MiKS5hcHBlbmQoaHRtbCk7DQog ICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KDQogICAgICAgIGNvZGlnbyA9IGRh dGFbMF07DQogICAgICAgIGNvZGlnbyA9IGNvZGlnby5yZXBsYWNlKC9eXHMrfFxz KyQvLCAnJyk7DQoNCiAgICAgICAgaWYgKCFpc05hTihwYXJzZUZsb2F0KGNvZGln bykpICYmIChjb2RpZ28ubGVuZ3RoID09IDggfHwgY29kaWdvLmxlbmd0aCA9PSA5 KSkgew0KICAgICAgICAgICAgJCgiI3NlcnZlaSIpLnZhbCgkKCcjJyArIHRoaXMu aWQgKyAnIDpzZWxlY3RlZCcpLnRleHQoKSk7DQogICAgICAgICAgICAkKCIjY29k aV9zZXJ2ZWkiKS52YWwoY29kaWdvKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KDQog ICAgJCgiI2NvZGlfcGFzc2l1IikuY2hhbmdlKGZ1bmN0aW9uKCkgew0KICAgICAg ICAkKCIjcGFzc2l1IikudmFsKCQoJyNjb2RpX3Bhc3NpdSA6c2VsZWN0ZWQnKS50 ZXh0KCkpOw0KDQogICAgICAgIGlmICgkKHRoaXMpLnZhbCgpID09ICItMSIpIHsN CiAgICAgICAgICAgICQoIiNkYWRlc19zcGFzc2l1Iikuc2hvdygpOw0KICAgICAg ICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgJCgiI2RhZGVzX3NwYXNz aXUiKS5oaWRlKCk7DQogICAgICAgIH0NCiAgICB9KTsNCg0KICAgICQoIi5hY2Np b25fYW51bmNpbyIpLmNsaWNrKGZ1bmN0aW9uKCkgew0KICAgICAgICBpZiAodGhp cy5pZCAhPSAnJykgew0KICAgICAgICAgICAgZGF0YSA9IHRoaXMuaWQuc3BsaXQo Il8iKTsNCiAgICAgICAgICAgICQoIiMiICsgZGF0YVswXSkudmFsKGRhdGFbMV0p Ow0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGRvY3VtZW50LlVSTC5pbmRleE9m KCJzZGVmYXVsdCIpID09IC0xKSB7DQogICAgICAgICAgICAkKCIjaW5zZXJpciIp LmF0dHIoImFjdGlvbiIsICJkZWZhdWx0LmFzcD9DPXBsYXRhZm9ybWEuIiArIHRo aXMubmFtZSk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAg ICAkKCIjaW5zZXJpciIpLmF0dHIoImFjdGlvbiIsICJzZGVmYXVsdC5hc3A/Qz1w bGF0YWZvcm1hLiIgKyB0aGlzLm5hbWUpOw0KICAgICAgICB9DQogICAgfSk7DQoN CiAgICAkKCIjYnRuQW51bGFyIikuY2xpY2soZnVuY3Rpb24oKSB7DQogICAgICAg ICQoIiNhbnVsYWNpb24iKS5zaG93KCk7DQogICAgICAgICQoIiNidG5BbnVsYXIi KS5hdHRyKCdkaXNhYmxlZCcsIHRydWUpOw0KICAgICAgICAkKCIjYnRuRmlybWFy IikuYXR0cignZGlzYWJsZWQnLCB0cnVlKTsNCiAgICAgICAgJCgiI2J0bkNvcGlh ciIpLmF0dHIoJ2Rpc2FibGVkJywgdHJ1ZSk7DQogICAgfSk7DQoNCiAgICAkKCIj YnRuQ29waWFyIikuY2xpY2soZnVuY3Rpb24oKSB7DQogICAgICAgICQoIiNmcm1B bnVuY2lvIikuYXR0cigiYWN0aW9uIiwgJCh0aGlzKS5hdHRyKCJuYW1lIikpOw0K ICAgICAgICAkKCIjYnRuQW51bGFyIikuYXR0cignZGlzYWJsZWQnLCB0cnVlKTsN CiAgICAgICAgJCgiI2J0bkZpcm1hciIpLmF0dHIoJ2Rpc2FibGVkJywgdHJ1ZSk7 DQogICAgICAgICQoIiNidG5Db3BpYXIiKS5hdHRyKCdkaXNhYmxlZCcsIHRydWUp Ow0KICAgICAgICAkKCIjZnJtQW51bmNpbyIpLnN1Ym1pdCgpOw0KICAgIH0pOw0K DQogICAgJCgiI2J0bkFudWxhcjIiKS5jbGljayhmdW5jdGlvbigpIHsNCiAgICAg ICAgaWYgKCQoIiNtb3Rpdm9BbnVsYWNpb24iKS52YWwoKSA9PSAnJykgew0KICAg ICAgICAgICAgJCgiI0Vycm9yTW90aXZvIikuc2hvdygpOw0KICAgICAgICB9DQog ICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgJCgiI2ZybUFudW5jaW8iKS5hdHRy KCJhY3Rpb24iLCAkKHRoaXMpLmF0dHIoIm5hbWUiKSk7DQogICAgICAgICAgICAk KCIjdGV4dG9maXJtYWRvIikudmFsKCQoIiNtb3Rpdm9BbnVsYWNpb24iKS52YWwo KSk7DQogICAgICAgICAgICByZXR1cm4gZmlybWFyKCQoIiN0ZXh0b2Zpcm1hZG8i KSwgJCgiI2Zpcm1hIikpDQogICAgICAgIH0NCiAgICB9KTsNCg0KICAgICQoIiNi dG5GaXJtYXIiKS5jbGljayhmdW5jdGlvbigpIHsNCiAgICAgICAgJCgiI2ZybUFu dW5jaW8iKS5hdHRyKCJhY3Rpb24iLCAkKHRoaXMpLmF0dHIoIm5hbWUiKSk7DQog ICAgICAgICQoIiN0ZXh0b2Zpcm1hZG8iKS52YWwoJCgiI3RleHRvYW51bmNpbyIp LnZhbCgpKTsNCiAgICAgICAgcmV0dXJuIGZpcm1hcigkKCIjdGV4dG9maXJtYWRv IiksICQoIiNmaXJtYSIpKTsNCiAgICB9KTsNCgkNCgkvLw0KCS8vIG1vc3RyYXIg Y2FyYWN0ZXJzIHRlY2xlamF0cyBhbCB0aXRsZSBkZWxzIHRleGFyZWENCgkvLw0K CWlmKCAkKCIjZGFkZXNfYW51bmNpICNkZXNjcmlwY2lvX2FudW5jaSAjZGVzY3Ii KS52YWwoKSAhPSB1bmRlZmluZWQgKQ0KCQkkKCIjZGFkZXNfYW51bmNpICNkZXNj cmlwY2lvX2FudW5jaSAjZGVzY3IiKS5hdHRyKCJ0aXRsZSIsICQoIiNkYWRlc19h bnVuY2kgI2Rlc2NyaXBjaW9fYW51bmNpICNkZXNjciIpLnZhbCgpLmxlbmd0aCAr ICIgY2Fyw6BjdGVycyIpOw0KCSQoIiNkYWRlc19hbnVuY2kgI2Rlc2NyaXBjaW9f YW51bmNpICNkZXNjciIpLmtleXVwKGZ1bmN0aW9uKCkgew0KCQkkKCIjZGFkZXNf YW51bmNpICNkZXNjcmlwY2lvX2FudW5jaSAjZGVzY3IiKS5hdHRyKCJ0aXRsZSIs ICQoIiNkYWRlc19hbnVuY2kgI2Rlc2NyaXBjaW9fYW51bmNpICNkZXNjciIpLnZh bCgpLmxlbmd0aCArICIgY2Fyw6BjdGVycyIpOw0KCX0pOwkNCgkNCglpZiggJCgi I2RhZGVzX2FudW5jaSAjYWx0cmVzMiAjYWx0cmVzX3NvbCIpLnZhbCgpICE9IHVu ZGVmaW5lZCApDQoJJCgiI2RhZGVzX2FudW5jaSAjYWx0cmVzMiAjYWx0cmVzX3Nv bCIpLmF0dHIoInRpdGxlIiwgJCgiI2RhZGVzX2FudW5jaSAjYWx0cmVzMiAjYWx0 cmVzX3NvbCIpLnZhbCgpLmxlbmd0aCArICIgY2Fyw6BjdGVycyIpOw0KCSQoIiNk YWRlc19hbnVuY2kgI2FsdHJlczIgI2FsdHJlc19zb2wiKS5rZXl1cChmdW5jdGlv bigpIHsNCgkJJCgiI2RhZGVzX2FudW5jaSAjYWx0cmVzMiAjYWx0cmVzX3NvbCIp LmF0dHIoInRpdGxlIiwgJCgiI2RhZGVzX2FudW5jaSAjYWx0cmVzMiAjYWx0cmVz X3NvbCIpLnZhbCgpLmxlbmd0aCArICIgY2Fyw6BjdGVycyIpOw0KCX0pOw0KCQ0K CWlmKCAkKCIjZGFkZXNfYW51bmNpICNub3RpZmljYWNpbyAjcmVzdW0iKS52YWwo KSAhPSB1bmRlZmluZWQgKQ0KCQkkKCIjZGFkZXNfYW51bmNpICNub3RpZmljYWNp byAjcmVzdW0iKS5hdHRyKCJ0aXRsZSIsICQoIiNkYWRlc19hbnVuY2kgI25vdGlm aWNhY2lvICNyZXN1bSIpLnZhbCgpLmxlbmd0aCArICIgY2Fyw6BjdGVycyIpOw0K CSQoIiNkYWRlc19hbnVuY2kgI25vdGlmaWNhY2lvICNyZXN1bSIpLmtleXVwKGZ1 bmN0aW9uKCkgew0KCQkkKCIjZGFkZXNfYW51bmNpICNub3RpZmljYWNpbyAjcmVz dW0iKS5hdHRyKCJ0aXRsZSIsICQoIiNkYWRlc19hbnVuY2kgI25vdGlmaWNhY2lv ICNyZXN1bSIpLnZhbCgpLmxlbmd0aCArICIgY2Fyw6BjdGVycyIpOw0KCX0pOw0K CQ0KICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqDQogICAgRklOIEZVTkNJT05BTElEQURFUyBJTlNF UkNJT04gQU5VTkNJTw0KICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KCQ0KICAgIC8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqDQogICAgRlVOQ0lPTkFMSURBREVTIEZJQ0hBIEFOVU5DSU8NCiAgICAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8NCgkNCglpZiggJCgiI2FudWxhY2lvbiAjbW90aXZvQW51bGFjaW9u IikudmFsKCkgIT0gdW5kZWZpbmVkICkNCgkJJCgiI2FudWxhY2lvbiAjbW90aXZv QW51bGFjaW9uIikuYXR0cigidGl0bGUiLCAkKCIjYW51bGFjaW9uICNtb3Rpdm9B bnVsYWNpb24iKS52YWwoKS5sZW5ndGggKyAiIGNhcsOgY3RlcnMiKTsNCgkkKCIj YW51bGFjaW9uICNtb3Rpdm9BbnVsYWNpb24iKS5rZXl1cChmdW5jdGlvbigpIHsN CgkJJCgiI2FudWxhY2lvbiAjbW90aXZvQW51bGFjaW9uIikuYXR0cigidGl0bGUi LCAkKCIjYW51bGFjaW9uICNtb3Rpdm9BbnVsYWNpb24iKS52YWwoKS5sZW5ndGgg KyAiIGNhcsOgY3RlcnMiKTsNCgkJaWYoICQoIiNhbnVsYWNpb24gI21vdGl2b0Fu dWxhY2lvbiIpLnZhbCgpLmxlbmd0aCA+IDM1MCApIHsNCgkJCWFsZXJ0KCJIYXMg YXJyaWJhdCBhbCBsw61taXQgZGUgY2Fyw6BjdGVycyBwZXJtZXNvcy4iKTsNCgkJ CSQoIiNhbnVsYWNpb24gI21vdGl2b0FudWxhY2lvbiIpLnZhbCggJCgiI2FudWxh Y2lvbiAjbW90aXZvQW51bGFjaW9uIikudmFsKCkuc3Vic3RyaW5nKDAsMzUwKSAp Ow0KCQkJJCgiI2FudWxhY2lvbiAjbW90aXZvQW51bGFjaW9uIikuYXR0cigidGl0 bGUiLCAkKCIjYW51bGFjaW9uICNtb3Rpdm9BbnVsYWNpb24iKS52YWwoKS5sZW5n dGggKyAiIGNhcsOgY3RlcnMiKTsNCgkJfQ0KCX0pOw0KCQ0KICAgIC8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqDQogICAgRklOIEZVTkNJT05BTElEQURFUyBGSUNIQSBBTlVOQ0lPDQogICAg KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovDQoJDQoNCgkNCiAgICAvLyBvbWJyYSBkaXYuYm94DQogICAg JCgiZGl2LmJveCIpLmFwcGVuZCgiPGRpdiBjbGFzcz0nb21icmEnPjwvZGl2PiIp Ow0KICAgIC8qDQogICAgLy8gZGVzcGxlZ2FibGUgY2VyY2ENCiAgICAkKCIuYWNj b3JkaW9uIHVsIGEiKS5jbGljayhmdW5jdGlvbigpIHsNCg0KICAgICAgICAkKHRo aXMpLmFkZENsYXNzKCJjdXJyZW50IikubmV4dCgpLnRvZ2dsZSgpOw0KDQogICAg ICAgIGlmICgkKHRoaXMpLnBhcmVudCgibGkiKS5oYXNDbGFzcygiY3VycmVudCIp KSB7DQogICAgJCh0aGlzKS5wYXJlbnQoImxpIikucmVtb3ZlQ2xhc3MoImN1cnJl bnQiKTsNCiAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCJjdXJyZW50Iik7DQogICAg fSBlbHNlIHsNCiAgICAkKHRoaXMpLnBhcmVudCgibGkiKS5hZGRDbGFzcygiY3Vy cmVudCIpOw0KICAgICQodGhpcykuYWRkQ2xhc3MoImN1cnJlbnQiKTsNCiAgICB9 DQoNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KDQogICAgfSkubmV4dCgpLmhpZGUo KTsNCiAgICAqLw0KICAgIC8vIGRlc3BsZWdhYmxlIGNlcnF1ZXMNCiAgICAkKCJ1 bC5kZXNwbGVnYWJsZSA+IGxpID4gYSIpLmNsaWNrKGZ1bmN0aW9uKCkgew0KDQog ICAgICAgIGN1cnJlbnRMaSA9ICQoInVsLmRlc3BsZWdhYmxlIGxpLmN1cnJlbnQi KTsNCiAgICAgICAgY3VycmVudExpLmZpbmQoJ2Rpdi5mb3JtJykuaGlkZSgpOw0K ICAgICAgICBjdXJyZW50TGkucmVtb3ZlQ2xhc3MoImN1cnJlbnQiKTsNCg0KICAg ICAgICBpZiAoY3VycmVudExpLmh0bWwoKSAhPSAkKHRoaXMpLnBhcmVudCgibGki KS5odG1sKCkpIHsNCiAgICAgICAgICAgICQodGhpcykucGFyZW50KCJsaSIpLmFk ZENsYXNzKCJjdXJyZW50Iik7DQogICAgICAgICAgICAkKCJ1bC5kZXNwbGVnYWJs ZSBsaS5jdXJyZW50IGRpdi5mb3JtIikuc2hvdygpOw0KICAgICAgICB9DQoNCiAg ICAgICAgcmV0dXJuIGZhbHNlOw0KDQogICAgfSkubmV4dCgpLmhpZGUoKTsNCg0K ICAgIC8vIGNvbG9ycyBmaWxlcyB0YXVsZXMNCiAgICAkKCJ0YWJsZS5kYWRlcyB0 Ym9keSB0cjpldmVuIikuYWRkQ2xhc3MoImV2ZW4iKTsNCg0KICAgIC8vIG1vc3Ry YXIgcmVzdWx0YXRzDQoJaWYoJCgiI2xhbmciKS52YWwoKSA9PSAiQ0EiKQkkKCJk aXYucmVzdWx0YXRzIHRhYmxlIikuYmVmb3JlKCI8cCBjbGFzcz0ndG9nZ2xlJz48 YSBocmVmPScjJyBjbGFzcz0nb3Blbic+UmVzdW0gZGUgbGEgZmFjdHVyYWNpJm9h Y3V0ZTs8L2E+PC9wPiIpOw0KCWVsc2UJCQkJCQkJJCgiZGl2LnJlc3VsdGF0cyB0 YWJsZSIpLmJlZm9yZSgiPHAgY2xhc3M9J3RvZ2dsZSc+PGEgaHJlZj0nIycgY2xh c3M9J29wZW4nPlJlc3VtZW4gZGUgbGEgZmFjdHVyYWNpJm9hY3V0ZTtuPC9hPjwv cD4iKTsNCg0KICAgICQoJ3AudG9nZ2xlIGEnKS5jbGljayhmdW5jdGlvbigpIHsN Cg0KICAgICAgICAkKCJkaXYucmVzdWx0YXRzIHRhYmxlIikudG9nZ2xlKCk7DQoN CiAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoIm9wZW4iKSkgew0KICAgICAg ICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygib3BlbiIpLmFkZENsYXNzKCJjbG9z ZWQiKTsNCiAgICAgICAgfSBlbHNlIGlmICgkKHRoaXMpLmhhc0NsYXNzKCJjbG9z ZWQiKSkgew0KICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygiY2xvc2Vk IikuYWRkQ2xhc3MoIm9wZW4iKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVy biBmYWxzZTsNCiAgICB9KQ0KDQogICAgLy8gbW9zdHJhciBwZXJtaXNvcw0KICAg ICQoImRpdi5wZXJtaXNvcyIpLmhpZGUoKTsNCiAgICAkKCJwLnBlcm1pc29zIGEi KS5jbGljayhmdW5jdGlvbigpIHsNCg0KICAgICAgICAkKCJkaXYucGVybWlzb3Mi KS50b2dnbGUoKTsNCg0KICAgICAgICBpZiAoJCgicC5wZXJtaXNvcyIpLmhhc0Ns YXNzKCJtb3N0cmFyIikpIHsNCiAgICAgICAgICAgICQoInAucGVybWlzb3MiKS5y ZW1vdmVDbGFzcygibW9zdHJhciIpLmFkZENsYXNzKCJvY3VsdGFyIik7DQogICAg ICAgICAgICAkKCJwLnBlcm1pc29zIGEiKS50ZXh0KHR4dE9jdWx0YXJQZXJtaXNv cyk7DQogICAgICAgIH0gZWxzZSBpZiAoJCgicC5wZXJtaXNvcyIpLmhhc0NsYXNz KCJvY3VsdGFyIikpIHsNCiAgICAgICAgICAgICQoInAucGVybWlzb3MiKS5yZW1v dmVDbGFzcygib2N1bHRhciIpLmFkZENsYXNzKCJtb3N0cmFyIik7DQogICAgICAg ICAgICAkKCJwLnBlcm1pc29zIGEiKS50ZXh0KHR4dE1vc3RyYXJQZXJtaXNvcyk7 DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gZmFsc2U7DQoNCiAgICB9KS5u ZXh0KCkuaGlkZSgpOw0KDQogICAgJCgiI3N1YmplY3RlIikuY2hhbmdlKGZ1bmN0 aW9uKCkgew0KICAgICAgICBpZiAoJCh0aGlzKS52YWwoKSA9PSAiIikgew0KICAg ICAgICAgICAgJCgiI2RhZGVzX3NwYXNzaXUiKS5zaG93KCk7DQogICAgICAgIH0N CiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAkKCIjZGFkZXNfc3Bhc3NpdSIp LmhpZGUoKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KDQogICAgJCgiI2luc2VyaXIg cC5pbmZvIGEiKS5jbGljayhmdW5jdGlvbigpIHsNCg0KICAgICAgICAkKCIjZGFk ZXNfc3ViaiIpLnRvZ2dsZSgpOw0KDQogICAgICAgIGlmICgkKCJwLmluZm8iKS5o YXNDbGFzcygibW9zdHJhciIpKSB7DQogICAgICAgICAgICAkKCJwLmluZm8iKS5y ZW1vdmVDbGFzcygibW9zdHJhciIpLmFkZENsYXNzKCJvY3VsdGFyIik7DQogICAg ICAgIH0gZWxzZSBpZiAoJCgicC5pbmZvIikuaGFzQ2xhc3MoIm9jdWx0YXIiKSkg ew0KICAgICAgICAgICAgJCgicC5pbmZvIikucmVtb3ZlQ2xhc3MoIm9jdWx0YXIi KS5hZGRDbGFzcygibW9zdHJhciIpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0 dXJuIGZhbHNlOw0KDQogICAgfSkubmV4dCgpLmhpZGUoKTsNCg0KICAgIC8vIG1v c3RyYXIgaW5mbyBhbnVuY2lzIHBlbmRlbnRzDQogICAgJCgiZGl2LmFudW5jaSBk aXYuZ3JvdXAiKS5oaWRlKCk7DQoNCiAgICAkKCJwLmRhZGVzIGEiKS5jbGljayhm dW5jdGlvbigpIHsNCg0KICAgICAgICAkKHRoaXMpLnBhcmVudCgpLm5leHQoImRp di5ncm91cCIpLnRvZ2dsZSgpOw0KICAgICAgICBpZiAoJCh0aGlzKS5wYXJlbnQo KS5oYXNDbGFzcygibW9zdHJhciIpKSB7DQogICAgICAgICAgICAkKHRoaXMpLnBh cmVudCgpLnJlbW92ZUNsYXNzKCJtb3N0cmFyIikuYWRkQ2xhc3MoIm9jdWx0YXIi KTsNCiAgICAgICAgICAgICQodGhpcykudGV4dCh0eHRPY3VsdGFyRGFkZXNBbnVu Y2kpOw0KICAgICAgICB9IGVsc2UgaWYgKCQodGhpcykucGFyZW50KCkuaGFzQ2xh c3MoIm9jdWx0YXIiKSkgew0KICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5y ZW1vdmVDbGFzcygib2N1bHRhciIpLmFkZENsYXNzKCJtb3N0cmFyIik7DQogICAg ICAgICAgICAkKHRoaXMpLnRleHQodHh0TW9zdHJhckRhZGVzQW51bmNpKTsNCiAg ICAgICAgfQ0KDQogICAgICAgIHJldHVybiBmYWxzZTsNCg0KICAgIH0pLm5leHQo KS5oaWRlKCk7DQoNCiAgICAkKCJwLmV2b2wgYSIpLmNsaWNrKGZ1bmN0aW9uKCkg ew0KDQogICAgICAgICQodGhpcykucGFyZW50KCkubmV4dCgiZGl2Lmdyb3VwIiku dG9nZ2xlKCk7DQogICAgICAgIGlmICgkKHRoaXMpLnBhcmVudCgpLmhhc0NsYXNz KCJtb3N0cmFyIikpIHsNCiAgICAgICAgICAgICQodGhpcykucGFyZW50KCkucmVt b3ZlQ2xhc3MoIm1vc3RyYXIiKS5hZGRDbGFzcygib2N1bHRhciIpOw0KICAgICAg ICAgICAgJCh0aGlzKS50ZXh0KHR4dE9jdWx0YXJFdm9sdWNpbykNCiAgICAgICAg fSBlbHNlIGlmICgkKHRoaXMpLnBhcmVudCgpLmhhc0NsYXNzKCJvY3VsdGFyIikp IHsNCiAgICAgICAgICAgICQodGhpcykucGFyZW50KCkucmVtb3ZlQ2xhc3MoIm9j dWx0YXIiKS5hZGRDbGFzcygibW9zdHJhciIpOw0KICAgICAgICAgICAgJCh0aGlz KS50ZXh0KHR4dE1vc3RyYXJFdm9sdWNpbykNCiAgICAgICAgfQ0KDQogICAgICAg IHJldHVybiBmYWxzZTsNCg0KICAgIH0pLm5leHQoKS5oaWRlKCk7DQoNCiAgICAv LyBmYW5jeWJveCBhZmVnaXINCiAgICBpZiAoJCgnYS5pZnJhbWVfYWZlZ2lyJyku bGVuZ3RoKSB7DQogICAgICAgICQoImEuaWZyYW1lX2FmZWdpciIpLmZhbmN5Ym94 KHsNCiAgICAgICAgICAgICJ6b29tU3BlZWRJbiI6IDMwMCwNCiAgICAgICAgICAg ICJ6b29tU3BlZWRPdXQiOiAzMDAsDQogICAgICAgICAgICAiZnJhbWVXaWR0aCI6 IDUzMCwNCiAgICAgICAgICAgICJmcmFtZUhlaWdodCI6IDQxMCwNCiAgICAgICAg ICAgICJvdmVybGF5U2hvdyI6IHRydWUsDQogICAgICAgICAgICAib3ZlcmxheU9w YWNpdHkiOiAuNzUNCiAgICAgICAgfSk7DQogICAgfQ0KICAgIC8vIGZhbmN5Ym94 IGJvcnJhcg0KICAgIGlmICgkKCdhLmlmcmFtZV9ib3JyYXInKS5sZW5ndGgpIHsN CiAgICAgICAgJCgiYS5pZnJhbWVfYm9ycmFyIikuZmFuY3lib3goew0KICAgICAg ICAgICAgInpvb21TcGVlZEluIjogMzAwLA0KICAgICAgICAgICAgInpvb21TcGVl ZE91dCI6IDMwMCwNCiAgICAgICAgICAgICJmcmFtZVdpZHRoIjogNTE0LA0KICAg ICAgICAgICAgImZyYW1lSGVpZ2h0IjogMTcwLA0KICAgICAgICAgICAgIm92ZXJs YXlTaG93IjogdHJ1ZSwNCiAgICAgICAgICAgICJvdmVybGF5T3BhY2l0eSI6IC43 NSwNCiAgICAgICAgICAgICJwYWRkaW5nIjogMA0KICAgICAgICB9KTsNCiAgICB9 DQoNCiAgICBpZiAoJCgnI2F1dG9yaXR6YWNpb25PSycpKSB7DQogICAgICAgICQo JyNhdXRvcml0emFjaW9uT0snKS5zdWJtaXQoKTsNCiAgICB9DQoNCiAgICBpZiAo ZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoID4gMCkgew0KICAgICAgICAvLyBE YXRlcGlja2VyDQoJCQ0KICAgICAgICBpZiAoJCgnLmRhdGVwaWNrZXInKS5sZW5n dGgpIHsNCgkJDQoJCQlmb3IgKHZhciBpPTA7IGk8JCgnLmRhdGVwaWNrZXInKS5s ZW5ndGg7IGkrKykgew0KCQkJCWlmICgkKCIuZGF0ZXBpY2tlciIpW2ldLnZhbHVl ID09ICIiKSB7DQoJCQkJCSQoIi5kYXRlcGlja2VyIilbaV0udmFsdWUgPSAiZGQv bW0vYWFhYSI7DQoJCQkJfQ0KDQoJCQkJLy8gb2JyaXIgZWwgY2FsZW5kYXJpIGFs IGZlciBjbGljIGEgbCdpbnB1dA0KCQkJCWlmKCQoIi5kYXRlcGlja2VyIilbaV0u bmFtZSA9PSAiZmVjaGFwdWJsaWNhY2lvbiIpIHsJLy8gaW5zZXJpciBhbnVuY2k6 IGRhdGEgcHJlY2lzYW1lbnQNCgkJCQkJJCgiI2ZlY2hhcHVibGljYWNpb24iKS5j bGljayhmdW5jdGlvbigpIHsNCgkJCQkJCSQoIiNmZWNoYXB1YmxpY2FjaW9uIiku ZGF0ZXBpY2tlciggInNob3ciICkNCgkJCQkJfSk7DQoJCQkJfQ0KCQkJCWlmKCQo Ii5kYXRlcGlja2VyIilbaV0ubmFtZSA9PSAiZGF0YV9jaXRhY2lvIikgewkvLyBp bnNlcmlyIGFudW5jaTogZGF0YSBjaXRhY2nDsw0KCQkJCQkkKCIjZGF0YV9jaXRh Y2lvIikuY2xpY2soZnVuY3Rpb24oKSB7DQoJCQkJCQkkKCIjZGF0YV9jaXRhY2lv IikuZGF0ZXBpY2tlciggInNob3ciICkNCgkJCQkJfSk7DQoJCQkJfQ0KCQkJCWlm KCQoIi5kYXRlcGlja2VyIilbaV0ubmFtZSA9PSAiZGF0YV9zdWJoYXN0YSIpIHsJ Ly8gaW5zZXJpciBhbnVuY2k6IGRhdGEgc3ViaGFzdGENCgkJCQkJJCgiI2RhdGFf c3ViaGFzdGEiKS5jbGljayhmdW5jdGlvbigpIHsNCgkJCQkJCSQoIiNkYXRhX3N1 Ymhhc3RhIikuZGF0ZXBpY2tlciggInNob3ciICkNCgkJCQkJfSk7DQoJCQkJfQ0K CQkJfQ0KDQogICAgICAgICAgICAkKCIuZGF0ZXBpY2tlciIpLmJsdXIoZnVuY3Rp b24oKSB7DQoJCQkJaWYgKCQodGhpcykudmFsKCkgPT0gIiIpIHsNCgkJCQkJJCh0 aGlzKS52YWwoImRkL21tL2FhYWEiKTsNCgkJCQl9DQogICAgICAgICAgICB9KTsN Cg0KICAgICAgICAgICAgJCgiLmRhdGVwaWNrZXIiKS5mb2N1cyhmdW5jdGlvbigp IHsNCgkJCQlpZiAoJCh0aGlzKS52YWwoKSA9PSAiZGQvbW0vYWFhYSIpIHsNCgkJ CQkJJCh0aGlzKS52YWwoIiIpOw0KCQkJCX0NCiAgICAgICAgICAgIH0pOw0KDQog ICAgICAgICAgICAkKCIuZGF0ZXBpY2tlciIpLmRhdGVwaWNrZXIoew0KICAgICAg ICAgICAgICAgIHNob3dPbjogJ2J1dHRvbicsDQogICAgICAgICAgICAgICAgYnV0 dG9uSW1hZ2U6ICdpbWFnZXMvY2FsZW5kYXIuZ2lmJywNCiAgICAgICAgICAgICAg ICBidXR0b25JbWFnZU9ubHk6IHRydWUsDQogICAgICAgICAgICAgICAgZmlyc3RE YXk6IDEsDQogICAgICAgICAgICAgICAgZGF0ZUZvcm1hdDogJ2RkL21tL3l5JywN CiAgICAgICAgICAgICAgICBidXR0b25UZXh0OiAnVHJpYSB1bmEgZGF0YScsDQog ICAgICAgICAgICAgICAgYnV0dG9uSW1hZ2U6ICdpbWcvY2FsZW5kYXIuZ2lmJywN CiAgICAgICAgICAgICAgICBiZWZvcmVTaG93RGF5OiBkaXNhYmxlRGF5cw0KICAg ICAgICAgICAgfSk7DQogICAgICAgIH0NCiAgICB9DQoJDQoJaWYoICEkKCcjc3Vi aGFzdGEnKS5pcygnOmNoZWNrZWQnKSApICQoIiNkYXRhX3N1Ymhhc3RhIikuZGF0 ZXBpY2tlcignZGlzYWJsZScpOw0KCWlmKCAhJCgnI2NpdGFjaW8nKS5pcygnOmNo ZWNrZWQnKSApICAkKCIjZGF0YV9jaXRhY2lvIikuZGF0ZXBpY2tlcignZGlzYWJs ZScpOw0KCWlmKCAhJCgnI2RhdGEnKS5pcygnOmNoZWNrZWQnKSApICAgICAkKCIj ZmVjaGFwdWJsaWNhY2lvbiIpLmRhdGVwaWNrZXIoJ2Rpc2FibGUnKTsNCn0pOw0K DQpmdW5jdGlvbiBkaXNhYmxlRGF5cyhkYXRlKSB7DQogICAgdmFyIHNEYXRlID0g ZGF0ZS5nZXREYXRlKCkudG9TdHJpbmcoKSArICIvIiArDQogICAgICAgICAgICAg ICAgIChkYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpICsgIi8iICsNCiAg ICAgICAgICAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCk7DQoN CiAgICB2YXIgdG9kYXkgPSBuZXcgRGF0ZSgpOw0KCQ0KCS8vDQoJLy8JY2xhc3Mg PSB0b2Rvcw0KCS8vDQoJaWYoICQodGhpcykuaGFzQ2xhc3MoInRvZG9zIikpIHsN CgkJcmV0dXJuIFt0cnVlXTsNCgl9DQoJDQoJaWYoICQodGhpcykuaGFzQ2xhc3Mo Im5vaG95IikgJiYNCgkJZGF0ZS5nZXREYXRlKCkgPT0gdG9kYXkuZ2V0RGF0ZSgp ICYmDQoJCWRhdGUuZ2V0TW9udGgoKSA9PSB0b2RheS5nZXRNb250aCgpICYmDQoJ CWRhdGUuZ2V0RnVsbFllYXIoKSA9PSB0b2RheS5nZXRGdWxsWWVhcigpICkgew0K CQlyZXR1cm4gW2ZhbHNlXTsNCgl9DQoJDQoJLy8NCgkvLwljbGFzcyA9IG5vZnV0 dXJhcw0KCS8vDQogICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoIm5vZnV0dXJhcyIp ICYmIGRhdGUgPiB0b2RheSkgew0KICAgICAgICByZXR1cm4gW2ZhbHNlXTsNCiAg ICB9DQoNCgkvLw0KCS8vCWNsYXNzID0gbm9wYXNhZGFzDQoJLy8NCiAgICBpZiAo JCh0aGlzKS5oYXNDbGFzcygibm9wYXNhZGFzIikgJiYgZGF0ZSA8IHRvZGF5KSB7 DQogICAgICAgIHJldHVybiBbZmFsc2VdOw0KICAgIH0NCgkNCgkvLw0KCS8vCWNs YXNzID0gbm9wYXNhZGFzMTNoDQoJLy8NCgkvL2lmICgkKHRoaXMpLmhhc0NsYXNz KCJub3Bhc2FkYXMxM2giKSkgew0KCS8vCWlmIChkYXRlIDwgdG9kYXkpDQoJLy8J CXJldHVybiBbZmFsc2VdOw0KCS8vCWlmIChkYXRlLmdldERhdGUoKT09dG9kYXku Z2V0RGF0ZSgpKzENCgkvLwkmJiBkYXRlLmdldE1vbnRoKCk9PXRvZGF5LmdldE1v bnRoKCkNCgkvLwkmJiBkYXRlLmdldFllYXIoKT09dG9kYXkuZ2V0WWVhcigpDQoJ Ly8JJiYgdG9kYXkuZ2V0SG91cnMoKSA+PSAxMyApDQoJLy8JCXJldHVybiBbZmFs c2VdOw0KCS8vfQ0KCQ0KICAgIC8vDQoJLy8JY2xhc3MgPSBub3NhYmFkb3MNCiAg ICAvLyAgU2FiYWRvcyBwb3N0ZXJpb3JlcyBhIE1heW8gZGUgMjAxMA0KICAgIC8v DQogICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoIm5vc2FiYWRvcyIpICYmIGRhdGUu Z2V0RGF5KCkgPT0gNikgew0KCQlpZiggZGF0ZS5nZXRGdWxsWWVhcigpID4gMjAx MCApDQoJCQlyZXR1cm4gW2ZhbHNlXTsNCgkJZWxzZSBpZiggZGF0ZS5nZXRGdWxs WWVhcigpID09IDIwMTAgJiYgZGF0ZS5nZXRNb250aCgpID49IDQgKQ0KCQkJcmV0 dXJuIFtmYWxzZV07DQogICAgfQ0KCQ0KCS8vDQoJLy8gY2xhc3MgPSBub3NhYmFk b3NKdWxpb2wNCgkvLyAgU2FiYWRvcyBwb3N0ZXJpb3JlcyBhIEp1bGlvbCBkZSAy MDEwDQoJLy8NCiAgICBpZiAoJCh0aGlzKS5oYXNDbGFzcygibm9zYWJhZG9zSnVs aW9sIikgJiYgZGF0ZS5nZXREYXkoKSA9PSA2KSB7DQoJCWlmKCBkYXRlLmdldEZ1 bGxZZWFyKCkgPiAyMDEwICkNCgkJCXJldHVybiBbZmFsc2VdOw0KCQllbHNlIGlm KCBkYXRlLmdldEZ1bGxZZWFyKCkgPT0gMjAxMCAmJiBkYXRlLmdldE1vbnRoKCkg Pj0gNiApDQoJCQlyZXR1cm4gW2ZhbHNlXTsNCiAgICB9DQoJDQoJLy8NCgkvLwlb SW5zZXJpciBhbnVuY2kgOjogRGF0YSBDaXRhY2lvLCBEYXRhIFN1Ymhhc3RhXQ0K CS8vDQoJLy8JU2kgdGVuaW0gZGVmaW5pZGEgbGEgZGF0YSBkZSBwdWJsaWNhY2lv LCBkZXNhY3RpdmFyZW0gZWxzIGRpZXMNCgkvLwlhbnRlcmlvcnMgYSBhcXVlc3Rh IGRlbHMgY2FsZW5kYXJpcyBDaXRhY2lvIGkgU3ViaGFzdGENCgkvLw0KCWlmKCAk KHRoaXMpLmF0dHIoJ2lkJyk9PSdkYXRhX2NpdGFjaW8nIHx8ICQodGhpcykuYXR0 cignaWQnKT09J2RhdGFfc3ViaGFzdGEnICkgew0KCQl2YXIgZGF0YV9wdWJsaWNh Y2lvID0gIiI7DQoJCWlmKCAkKCcjb3JkaW5hcmlhJykuaXMoJzpjaGVja2VkJykg KSBkYXRhX3B1YmxpY2FjaW8gPSAkKCcjZGF0YXB1Yl9vJykudmFsKCk7DQoJCWVs c2UgaWYoICQoJyN1cmdlbnQnKS5pcygnOmNoZWNrZWQnKSApIGRhdGFfcHVibGlj YWNpbyA9ICQoJyNkYXRhcHViX3UnKS52YWwoKTsNCgkJZWxzZSBpZiggJCgnI2V4 cHJlcycpLmlzKCc6Y2hlY2tlZCcpICkgZGF0YV9wdWJsaWNhY2lvID0gJCgnI2Rh dGFwdWJfZScpLnZhbCgpOw0KCQllbHNlIGlmKCAkKCcjZGF0YScpLmlzKCc6Y2hl Y2tlZCcpICkgZGF0YV9wdWJsaWNhY2lvID0gJCgnI2ZlY2hhcHVibGljYWNpb24n KS52YWwoKTsNCgkJZGF0YV9wdWJsaWNhY2lvID0gZGF0YV9wdWJsaWNhY2lvLnNw bGl0KCIvIik7DQoJCWlmKCBkYXRhX3B1YmxpY2FjaW8ubGVuZ3RoID09IDMgKSB7 DQoJCQlkYXRhX3B1YmxpY2FjaW8gPSBuZXcgRGF0ZShkYXRhX3B1YmxpY2FjaW9b Ml0sZGF0YV9wdWJsaWNhY2lvWzFdLTEsZGF0YV9wdWJsaWNhY2lvWzBdKTsNCgkJ CQlpZiggZGF0ZSA8PSBkYXRhX3B1YmxpY2FjaW8gKQ0KCQkJCQlyZXR1cm4gW2Zh bHNlXTsNCgkJfQ0KCX0NCgkJDQoJLy8NCgkvLwlbSW5zZXJpciBhbnVuY2kgOjog RGF0YSBQcmVjaXNhbWVudF0NCgkvLw0KCS8vCUhhYmlsaXRhdHMgYSBwYXJ0aXIg ZGUgMSwyIG8gNSBkaWVzIG5hdHVyYWxzLg0KCS8vCURhdGEgY2FsY3VsYWRhIGEg I2p1c3RpY2lhX2RhdGFfbWluDQoJLy8NCglpZiggJCh0aGlzKS5hdHRyKCdpZCcp PT0nZmVjaGFwdWJsaWNhY2lvbicgKSB7DQoJCXZhciBmZWNoYXB1YmxpY2FjaW9u X2RhdGFfbWluID0gJCgnI2ZlY2hhcHVibGljYWNpb25fZGF0YV9taW4nKS52YWwo KTsNCgkJZmVjaGFwdWJsaWNhY2lvbl9kYXRhX21pbiA9IGZlY2hhcHVibGljYWNp b25fZGF0YV9taW4uc3BsaXQoIi8iKTsNCgkJaWYoIGZlY2hhcHVibGljYWNpb25f ZGF0YV9taW4ubGVuZ3RoID09IDMgKSB7DQoJCQlmZWNoYXB1YmxpY2FjaW9uX2Rh dGFfbWluID0gbmV3IERhdGUoZmVjaGFwdWJsaWNhY2lvbl9kYXRhX21pblsyXSxm ZWNoYXB1YmxpY2FjaW9uX2RhdGFfbWluWzFdLTEsZmVjaGFwdWJsaWNhY2lvbl9k YXRhX21pblswXSk7DQoJCQlpZiggZGF0ZSA8IGZlY2hhcHVibGljYWNpb25fZGF0 YV9taW4gKQ0KCQkJcmV0dXJuIFtmYWxzZV07DQoJCX0NCgl9DQoJDQoJLy8gLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vDQoJLy8gcG9yIGRlZmVjdG8gKGNsYXNzPSJkYXRl cGlja2VyIikgc2UgZGVzYWN0aXZhbiBkb21pbmdvcyB5IGZlc3Rpdm9zDQoJLy8g Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vDQoNCiAgICAvLw0KICAgIC8vICBEb21pbmdv cw0KICAgIC8vDQogICAgaWYgKGRhdGUuZ2V0RGF5KCkgPT0gMCkgew0KICAgICAg ICByZXR1cm4gW2ZhbHNlXTsNCiAgICB9DQoNCiAgICAvLw0KICAgIC8vICBGZXN0 aXZvcyBzZWd1biBlbCBhcnJheSBkZWZpbmlkbyBlbiBmZXN0aXZvcy5qcw0KICAg IC8vCUFwbGljYXQgYSBwYXJ0aXIgZGUgSnVsaW9sIDIwMTANCgkvLw0KICAgIGlm ICgkLmluQXJyYXkoc0RhdGUsIGZlc3Rpdm9zKSAhPSAtMSkgew0KCQlpZiggZGF0 ZS5nZXRGdWxsWWVhcigpID4gMjAxMCApDQoJCQlyZXR1cm4gW2ZhbHNlXTsNCgkJ ZWxzZSBpZiggZGF0ZS5nZXRGdWxsWWVhcigpID09IDIwMTAgJiYgZGF0ZS5nZXRN b250aCgpID49IDYgKQ0KCQkJcmV0dXJuIFtmYWxzZV07DQogICAgfQ0KDQogICAg cmV0dXJuIFt0cnVlXTsNCn0NCg0KLy8gY29tcHJvdmEgbGEgZ3JhbmRhcmlhIGQn dW4gYXJ4aXUgaSBkZW1hbmEgY29uZmlybWFjacOzIGFiYW5zIGRlIGZlciBsYSBj w6BycmVnYQ0KLy8gc2kgZXMgbcOpcyBncmFuIGRlIDNNQiwgamEgcXVlIGwnYXBs aWNhY2nDsyBwb3QgZG9uYXIgdGltZW91dA0KZnVuY3Rpb24gY2hlY2tGaWxlKGZp bGVFbGVtZW50KQ0Kew0KCXZhciBteUZTTyA9IG5ldyBBY3RpdmVYT2JqZWN0KCJT Y3JpcHRpbmcuRmlsZVN5c3RlbU9iamVjdCIpOw0KCXZhciBmaWxlcGF0aCA9IGZp bGVFbGVtZW50LnZhbHVlOw0KCS8vIGV4dGVuc2lvIChET0MvUlRGL1pJUCkNCglp ZiggZmlsZXBhdGggIT0gIiIgKSB7DQoJCWlmKCBteUZTTy5nZXRFeHRlbnNpb25O YW1lKGZpbGVwYXRoKS50b1VwcGVyQ2FzZSgpICE9ICJSVEYiDQoJCQkmJiBteUZT Ty5nZXRFeHRlbnNpb25OYW1lKGZpbGVwYXRoKS50b1VwcGVyQ2FzZSgpICE9ICJE T0MiDQoJCQkmJiBteUZTTy5nZXRFeHRlbnNpb25OYW1lKGZpbGVwYXRoKS50b1Vw cGVyQ2FzZSgpICE9ICJHSUYiDQoJCQkmJiBteUZTTy5nZXRFeHRlbnNpb25OYW1l KGZpbGVwYXRoKS50b1VwcGVyQ2FzZSgpICE9ICJKUEciDQoJCQkmJiBteUZTTy5n ZXRFeHRlbnNpb25OYW1lKGZpbGVwYXRoKS50b1VwcGVyQ2FzZSgpICE9ICJKUEVH Ig0KCQkJJiYgbXlGU08uZ2V0RXh0ZW5zaW9uTmFtZShmaWxlcGF0aCkudG9VcHBl ckNhc2UoKSAhPSAiWklQIiApIHsNCgkJCSQoJyNmaWxlX2Vycm9yX2V4dCcpLnZh bCgiMSIpOw0KCQkJYWxlcnQobXlGU08uZ2V0RXh0ZW5zaW9uTmFtZShmaWxlcGF0 aCkudG9VcHBlckNhc2UoKSk7DQoJCX0NCgkJLy8gZ3JhbmRhcmlhIDwgM21iDQoJ CXZhciB0aGVmaWxlID0gbXlGU08uZ2V0RmlsZShmaWxlcGF0aCk7DQoJCXZhciBz aXplID0gdGhlZmlsZS5zaXplOw0KCQlpZiggc2l6ZSA+ICgzKjEwMjQqMTAyNCkg KQ0KCQkJYWxlcnQoICQoJyNmaWxlX2Vycm9yX3NpemUnKS52YWwoKSApOw0KCX0N Cn0= ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline; filename=jquery.fancybox-1.2.1.js Content-Type: application/x-javascript; charset=iso-8859-1; name=jquery.fancybox-1.2.1.js Content-Location: http://bop.diba.es/js/fancybox/jquery.fancybox-1.2.1.js Content-Transfer-Encoding: Base64 LyoKICogRmFuY3lCb3ggLSBzaW1wbGUgYW5kIGZhbmN5IGpRdWVyeSBwbHVnaW4K ICogRXhhbXBsZXMgYW5kIGRvY3VtZW50YXRpb24gYXQ6IGh0dHA6Ly9mYW5jeS5r bGFkZS5sdi8KICogVmVyc2lvbjogMS4yLjEgKDEzLzAzLzIwMDkpCiAqIENvcHly aWdodCAoYykgMjAwOSBKYW5pcyBTa2FybmVsaXMKICogTGljZW5zZWQgdW5kZXIg dGhlIE1JVCBMaWNlbnNlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01J VF9MaWNlbnNlCiAqIFJlcXVpcmVzOiBqUXVlcnkgdjEuMysKKi8KOyhmdW5jdGlv bigkKSB7DQoNCiAgICAkLmZuLmZpeFBORyA9IGZ1bmN0aW9uKCkgew0KICAgICAg ICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgdmFy IGltYWdlID0gJCh0aGlzKS5jc3MoJ2JhY2tncm91bmRJbWFnZScpOw0KDQogICAg ICAgICAgICBpZiAoaW1hZ2UubWF0Y2goL151cmxcKFsiJ10/KC4qXC5wbmcpWyIn XT9cKSQvaSkpIHsNCiAgICAgICAgICAgICAgICBpbWFnZSA9IFJlZ0V4cC4kMTsN Cg0KICAgICAgICAgICAgICAgICQodGhpcykuY3NzKHsNCiAgICAgICAgICAgICAg ICAgICAnYmFja2dyb3VuZEltYWdlJzogJ25vbmUnLA0KICAgICAgICAgICAgICAg ICAgICdmaWx0ZXInOiAicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0 LkFscGhhSW1hZ2VMb2FkZXIoZW5hYmxlZD10cnVlLCBzaXppbmdNZXRob2Q9IiAr ICgkKHRoaXMpLmNzcygnYmFja2dyb3VuZFJlcGVhdCcpID09ICduby1yZXBlYXQn ID8gJ2Nyb3AnIDogJ3NjYWxlJykgKyAiLCBzcmM9JyIgKyBpbWFnZSArICInKSIN CiAgICAgICAgICAgICAgICB9KS5lYWNoKGZ1bmN0aW9uKCkgew0KICAgICAgICAg ICAgICAgICAgICB2YXIgcG9zaXRpb24gPSAkKHRoaXMpLmNzcygncG9zaXRpb24n KTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uICE9ICdhYnNvbHV0 ZScgJiYgcG9zaXRpb24gIT0gJ3JlbGF0aXZlJykNCiAgICAgICAgICAgICAgICAg ICAgICAgICQodGhpcykuY3NzKCdwb3NpdGlvbicsICdyZWxhdGl2ZScpOw0KICAg ICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAg ICB9Ow0KDQogICAgdmFyIGVsZW0sIG9wdHMsIGJ1c3kgPSBmYWxzZSwgaW1hZ2VQ cmVsb2FkZXIgPSBuZXcgSW1hZ2UsIGxvYWRpbmdUaW1lciwgbG9hZGluZ0ZyYW1l ID0gMSwgaW1hZ2VSZWdFeHAgPSAvXC4oanBnfGdpZnxwbmd8Ym1wfGpwZWcpKC4q KT8kL2k7DQogICAgdmFyIGlzSUUgPSAoJC5icm93c2VyLm1zaWUgJiYgcGFyc2VJ bnQoJC5icm93c2VyLnZlcnNpb24uc3Vic3RyKDAsIDEpKSA8IDgpOw0KDQogICAg JC5mbi5mYW5jeWJveCA9IGZ1bmN0aW9uKHNldHRpbmdzKSB7DQogICAgICAgIHNl dHRpbmdzID0gJC5leHRlbmQoe30sICQuZm4uZmFuY3lib3guZGVmYXVsdHMsIHNl dHRpbmdzKTsNCg0KICAgICAgICB2YXIgbWF0Y2hlZEdyb3VwID0gdGhpczsNCg0K ICAgICAgICBmdW5jdGlvbiBfaW5pdGlhbGl6ZSgpIHsNCiAgICAgICAgICAgIGVs ZW0gPSB0aGlzOw0KICAgICAgICAgICAgb3B0cyA9IHNldHRpbmdzOw0KDQogICAg ICAgICAgICBfc3RhcnQoKTsNCg0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0K ICAgICAgICB9Ow0KDQogICAgICAgIGZ1bmN0aW9uIF9zdGFydCgpIHsNCiAgICAg ICAgICAgIGlmIChidXN5KSByZXR1cm47DQoNCiAgICAgICAgICAgIGlmICgkLmlz RnVuY3Rpb24ob3B0cy5jYWxsYmFja09uU3RhcnQpKSB7DQogICAgICAgICAgICAg ICAgb3B0cy5jYWxsYmFja09uU3RhcnQoKTsNCiAgICAgICAgICAgIH0NCg0KICAg ICAgICAgICAgb3B0cy5pdGVtQXJyYXkgPSBbXTsNCiAgICAgICAgICAgIG9wdHMu aXRlbUN1cnJlbnQgPSAwOw0KDQogICAgICAgICAgICBpZiAoc2V0dGluZ3MuaXRl bUFycmF5Lmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgICAgICBvcHRzLml0ZW1B cnJheSA9IHNldHRpbmdzLml0ZW1BcnJheTsNCg0KICAgICAgICAgICAgfSBlbHNl IHsNCiAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHt9Ow0KDQogICAgICAgICAg ICAgICAgaWYgKCFlbGVtLnJlbCB8fCBlbGVtLnJlbCA9PSAnJykgew0KICAgICAg ICAgICAgICAgICAgICB2YXIgaXRlbSA9IHsgaHJlZjogZWxlbS5ocmVmLCB0aXRs ZTogZWxlbS50aXRsZSB9Ow0KDQogICAgICAgICAgICAgICAgICAgIGlmICgkKGVs ZW0pLmNoaWxkcmVuKCJpbWc6Zmlyc3QiKS5sZW5ndGgpIHsNCiAgICAgICAgICAg ICAgICAgICAgICAgIGl0ZW0ub3JpZyA9ICQoZWxlbSkuY2hpbGRyZW4oImltZzpm aXJzdCIpOw0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAg ICAgICAgb3B0cy5pdGVtQXJyYXkucHVzaChpdGVtKTsNCg0KICAgICAgICAgICAg ICAgIH0gZWxzZSB7DQoNCiAgICAgICAgICAgICAgICAgICAgdmFyIHN1Ykdyb3Vw ID0gJChtYXRjaGVkR3JvdXApLmZpbHRlcigiYVtyZWw9IiArIGVsZW0ucmVsICsg Il0iKTsNCg0KICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHt9Ow0KDQog ICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ViR3JvdXAu bGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSB7 IGhyZWY6IHN1Ykdyb3VwW2ldLmhyZWYsIHRpdGxlOiBzdWJHcm91cFtpXS50aXRs ZSB9Ow0KDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJChzdWJHcm91cFtp XSkuY2hpbGRyZW4oImltZzpmaXJzdCIpLmxlbmd0aCkgew0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGl0ZW0ub3JpZyA9ICQoc3ViR3JvdXBbaV0pLmNoaWxk cmVuKCJpbWc6Zmlyc3QiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0K ICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5pdGVtQXJyYXkucHVzaChpdGVt KTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAg IHdoaWxlIChvcHRzLml0ZW1BcnJheVtvcHRzLml0ZW1DdXJyZW50XS5ocmVmICE9 IGVsZW0uaHJlZikgew0KICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5pdGVt Q3VycmVudCsrOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg ICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAob3B0cy5vdmVy bGF5U2hvdykgew0KICAgICAgICAgICAgICAgIGlmIChpc0lFKSB7DQogICAgICAg ICAgICAgICAgICAgICQoJ2VtYmVkLCBvYmplY3QsIHNlbGVjdCcpLmNzcygndmlz aWJpbGl0eScsICdoaWRkZW4nKTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAg ICAgICAgICAgICAkKCIjZmFuY3lfb3ZlcmxheSIpLmNzcygnb3BhY2l0eScsIG9w dHMub3ZlcmxheU9wYWNpdHkpLnNob3coKTsNCiAgICAgICAgICAgIH0NCg0KICAg ICAgICAgICAgX2NoYW5nZV9pdGVtKCk7DQogICAgICAgIH07DQoNCiAgICAgICAg ZnVuY3Rpb24gX2NoYW5nZV9pdGVtKCkgew0KICAgICAgICAgICAgJCgiI2ZhbmN5 X3JpZ2h0LCAjZmFuY3lfbGVmdCwgI2ZhbmN5X2Nsb3NlLCAjZmFuY3lfdGl0bGUi KS5oaWRlKCk7DQoNCiAgICAgICAgICAgIHZhciBocmVmID0gb3B0cy5pdGVtQXJy YXlbb3B0cy5pdGVtQ3VycmVudF0uaHJlZjsNCg0KICAgICAgICAgICAgaWYgKGhy ZWYubWF0Y2goLyMvKSkgew0KICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSB3 aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgnIycpWzBdOyB0YXJnZXQgPSBocmVm LnJlcGxhY2UodGFyZ2V0LCAnJyk7IHRhcmdldCA9IHRhcmdldC5zdWJzdHIodGFy Z2V0LmluZGV4T2YoJyMnKSk7DQoNCiAgICAgICAgICAgICAgICBfc2V0X2NvbnRl bnQoJzxkaXYgaWQ9ImZhbmN5X2RpdiI+JyArICQodGFyZ2V0KS5odG1sKCkgKyAn PC9kaXY+Jywgb3B0cy5mcmFtZVdpZHRoLCBvcHRzLmZyYW1lSGVpZ2h0KTsNCg0K ICAgICAgICAgICAgfSBlbHNlIGlmIChocmVmLm1hdGNoKGltYWdlUmVnRXhwKSkg ew0KICAgICAgICAgICAgICAgIGltYWdlUHJlbG9hZGVyID0gbmV3IEltYWdlOyBp bWFnZVByZWxvYWRlci5zcmMgPSBocmVmOw0KDQogICAgICAgICAgICAgICAgaWYg KGltYWdlUHJlbG9hZGVyLmNvbXBsZXRlKSB7DQogICAgICAgICAgICAgICAgICAg IF9wcm9jZWVkX2ltYWdlKCk7DQoNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0K ICAgICAgICAgICAgICAgICAgICAkLmZuLmZhbmN5Ym94LnNob3dMb2FkaW5nKCk7 DQoNCiAgICAgICAgICAgICAgICAgICAgJChpbWFnZVByZWxvYWRlcikudW5iaW5k KCkuYmluZCgnbG9hZCcsIGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgICAgICAg ICAgICAgJCgiLmZhbmN5X2xvYWRpbmciKS5oaWRlKCk7DQoNCiAgICAgICAgICAg ICAgICAgICAgICAgIF9wcm9jZWVkX2ltYWdlKCk7DQogICAgICAgICAgICAgICAg ICAgIH0pOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgfSBlbHNl IGlmIChocmVmLm1hdGNoKCJpZnJhbWUiKSB8fCBlbGVtLmNsYXNzTmFtZS5pbmRl eE9mKCJpZnJhbWUiKSA+PSAwKSB7DQogICAgICAgICAgICBfc2V0X2NvbnRlbnQo JzxpZnJhbWUgaWQ9ImZhbmN5X2ZyYW1lIiBvbmxvYWQ9IiQuZm4uZmFuY3lib3gu c2hvd0lmcmFtZSgpIiBuYW1lPSJmYW5jeV9pZnJhbWUnICsgTWF0aC5yb3VuZChN YXRoLnJhbmRvbSgpICogMTAwMCkgKyAnIiBmcmFtZWJvcmRlcj0iMCIgaHNwYWNl PSIwIiBzcmM9IicgKyBocmVmICsgJyI+PC9pZnJhbWU+Jywgb3B0cy5mcmFtZVdp ZHRoLCBvcHRzLmZyYW1lSGVpZ2h0KTsNCg0KICAgICAgICAgICAgfSBlbHNlIHsN CiAgICAgICAgICAgICAgICAkLmdldChocmVmLCBmdW5jdGlvbihkYXRhKSB7DQog ICAgICAgICAgICAgICAgICAgIF9zZXRfY29udGVudCgnPGRpdiBpZD0iZmFuY3lf YWpheCI+JyArIGRhdGEgKyAnPC9kaXY+Jywgb3B0cy5mcmFtZVdpZHRoLCBvcHRz LmZyYW1lSGVpZ2h0KTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAg IH0NCiAgICAgICAgfTsNCg0KICAgICAgICBmdW5jdGlvbiBfcHJvY2VlZF9pbWFn ZSgpIHsNCiAgICAgICAgICAgIGlmIChvcHRzLmltYWdlU2NhbGUpIHsNCiAgICAg ICAgICAgICAgICB2YXIgdyA9ICQuZm4uZmFuY3lib3guZ2V0Vmlld3BvcnQoKTsN Cg0KICAgICAgICAgICAgICAgIHZhciByID0gTWF0aC5taW4oTWF0aC5taW4od1sw XSAtIDM2LCBpbWFnZVByZWxvYWRlci53aWR0aCkgLyBpbWFnZVByZWxvYWRlci53 aWR0aCwgTWF0aC5taW4od1sxXSAtIDYwLCBpbWFnZVByZWxvYWRlci5oZWlnaHQp IC8gaW1hZ2VQcmVsb2FkZXIuaGVpZ2h0KTsNCg0KICAgICAgICAgICAgICAgIHZh ciB3aWR0aCA9IE1hdGgucm91bmQociAqIGltYWdlUHJlbG9hZGVyLndpZHRoKTsN CiAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gTWF0aC5yb3VuZChyICogaW1h Z2VQcmVsb2FkZXIuaGVpZ2h0KTsNCg0KICAgICAgICAgICAgfSBlbHNlIHsNCiAg ICAgICAgICAgICAgICB2YXIgd2lkdGggPSBpbWFnZVByZWxvYWRlci53aWR0aDsN CiAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gaW1hZ2VQcmVsb2FkZXIuaGVp Z2h0Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBfc2V0X2NvbnRlbnQo JzxpbWcgYWx0PSIiIGlkPSJmYW5jeV9pbWciIHNyYz0iJyArIGltYWdlUHJlbG9h ZGVyLnNyYyArICciIC8+Jywgd2lkdGgsIGhlaWdodCk7DQogICAgICAgIH07DQoN CiAgICAgICAgZnVuY3Rpb24gX3ByZWxvYWRfbmVpZ2hib3JfaW1hZ2VzKCkgew0K ICAgICAgICAgICAgaWYgKChvcHRzLml0ZW1BcnJheS5sZW5ndGggLSAxKSA+IG9w dHMuaXRlbUN1cnJlbnQpIHsNCiAgICAgICAgICAgICAgICB2YXIgaHJlZiA9IG9w dHMuaXRlbUFycmF5W29wdHMuaXRlbUN1cnJlbnQgKyAxXS5ocmVmOw0KDQogICAg ICAgICAgICAgICAgaWYgKGhyZWYubWF0Y2goaW1hZ2VSZWdFeHApKSB7DQogICAg ICAgICAgICAgICAgICAgIG9iak5leHQgPSBuZXcgSW1hZ2UoKTsNCiAgICAgICAg ICAgICAgICAgICAgb2JqTmV4dC5zcmMgPSBocmVmOw0KICAgICAgICAgICAgICAg IH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKG9wdHMuaXRlbUN1 cnJlbnQgPiAwKSB7DQogICAgICAgICAgICAgICAgdmFyIGhyZWYgPSBvcHRzLml0 ZW1BcnJheVtvcHRzLml0ZW1DdXJyZW50IC0gMV0uaHJlZjsNCg0KICAgICAgICAg ICAgICAgIGlmIChocmVmLm1hdGNoKGltYWdlUmVnRXhwKSkgew0KICAgICAgICAg ICAgICAgICAgICBvYmpOZXh0ID0gbmV3IEltYWdlKCk7DQogICAgICAgICAgICAg ICAgICAgIG9iak5leHQuc3JjID0gaHJlZjsNCiAgICAgICAgICAgICAgICB9DQog ICAgICAgICAgICB9DQogICAgICAgIH07DQoNCiAgICAgICAgZnVuY3Rpb24gX3Nl dF9jb250ZW50KHZhbHVlLCB3aWR0aCwgaGVpZ2h0KSB7DQogICAgICAgICAgICBi dXN5ID0gdHJ1ZTsNCg0KICAgICAgICAgICAgdmFyIHBhZCA9IG9wdHMucGFkZGlu ZzsNCg0KICAgICAgICAgICAgaWYgKGlzSUUpIHsNCiAgICAgICAgICAgICAgICAk KCIjZmFuY3lfY29udGVudCIpWzBdLnN0eWxlLnJlbW92ZUV4cHJlc3Npb24oImhl aWdodCIpOw0KICAgICAgICAgICAgICAgICQoIiNmYW5jeV9jb250ZW50IilbMF0u c3R5bGUucmVtb3ZlRXhwcmVzc2lvbigid2lkdGgiKTsNCiAgICAgICAgICAgIH0N Cg0KICAgICAgICAgICAgaWYgKHBhZCA+IDApIHsNCiAgICAgICAgICAgICAgICB3 aWR0aCArPSBwYWQgKiAyOw0KICAgICAgICAgICAgICAgIGhlaWdodCArPSBwYWQg KiAyOw0KDQogICAgICAgICAgICAgICAgJCgiI2ZhbmN5X2NvbnRlbnQiKS5jc3Mo ew0KICAgICAgICAgICAgICAgICAgICAndG9wJzogcGFkICsgJ3B4JywNCiAgICAg ICAgICAgICAgICAgICAgJ3JpZ2h0JzogcGFkICsgJ3B4JywNCiAgICAgICAgICAg ICAgICAgICAgJ2JvdHRvbSc6IHBhZCArICdweCcsDQogICAgICAgICAgICAgICAg ICAgICdsZWZ0JzogcGFkICsgJ3B4JywNCiAgICAgICAgICAgICAgICAgICAgJ3dp ZHRoJzogJ2F1dG8nLA0KICAgICAgICAgICAgICAgICAgICAnaGVpZ2h0JzogJ2F1 dG8nDQogICAgICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICAgICBpZiAo aXNJRSkgew0KICAgICAgICAgICAgICAgICAgICAkKCIjZmFuY3lfY29udGVudCIp WzBdLnN0eWxlLnNldEV4cHJlc3Npb24oJ2hlaWdodCcsICcodGhpcy5wYXJlbnRO b2RlLmNsaWVudEhlaWdodCAtIDIwKScpOw0KICAgICAgICAgICAgICAgICAgICAk KCIjZmFuY3lfY29udGVudCIpWzBdLnN0eWxlLnNldEV4cHJlc3Npb24oJ3dpZHRo JywgJyh0aGlzLnBhcmVudE5vZGUuY2xpZW50V2lkdGggLSAyMCknKTsNCiAgICAg ICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAg ICAgICAgJCgiI2ZhbmN5X2NvbnRlbnQiKS5jc3Moew0KICAgICAgICAgICAgICAg ICAgICAndG9wJzogMCwNCiAgICAgICAgICAgICAgICAgICAgJ3JpZ2h0JzogMCwN CiAgICAgICAgICAgICAgICAgICAgJ2JvdHRvbSc6IDAsDQogICAgICAgICAgICAg ICAgICAgICdsZWZ0JzogMCwNCiAgICAgICAgICAgICAgICAgICAgJ3dpZHRoJzog JzEwMCUnLA0KICAgICAgICAgICAgICAgICAgICAnaGVpZ2h0JzogJzEwMCUnDQog ICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAg IGlmICgkKCIjZmFuY3lfb3V0ZXIiKS5pcygiOnZpc2libGUiKSAmJiB3aWR0aCA9 PSAkKCIjZmFuY3lfb3V0ZXIiKS53aWR0aCgpICYmIGhlaWdodCA9PSAkKCIjZmFu Y3lfb3V0ZXIiKS5oZWlnaHQoKSkgew0KICAgICAgICAgICAgICAgICQoIiNmYW5j eV9jb250ZW50IikuZmFkZU91dCgiZmFzdCIsIGZ1bmN0aW9uKCkgew0KICAgICAg ICAgICAgICAgICAgICAkKCIjZmFuY3lfY29udGVudCIpLmVtcHR5KCkuYXBwZW5k KCQodmFsdWUpKS5mYWRlSW4oIm5vcm1hbCIsIGZ1bmN0aW9uKCkgew0KICAgICAg ICAgICAgICAgICAgICAgICAgX2ZpbmlzaCgpOw0KICAgICAgICAgICAgICAgICAg ICB9KTsNCiAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgIHJl dHVybjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdmFyIHcgPSAkLmZu LmZhbmN5Ym94LmdldFZpZXdwb3J0KCk7DQoNCiAgICAgICAgICAgIHZhciBpdGVt TGVmdCA9ICh3aWR0aCArIDM2KSA+IHdbMF0gPyB3WzJdIDogKHdbMl0gKyBNYXRo LnJvdW5kKCh3WzBdIC0gd2lkdGggLSAzNikgLyAyKSk7DQogICAgICAgICAgICB2 YXIgaXRlbVRvcCA9IChoZWlnaHQgKyA1MCkgPiB3WzFdID8gd1szXSA6ICh3WzNd ICsgTWF0aC5yb3VuZCgod1sxXSAtIGhlaWdodCAtIDUwKSAvIDIpKTsNCg0KICAg ICAgICAgICAgdmFyIGl0ZW1PcHRzID0gew0KICAgICAgICAgICAgICAgICdsZWZ0 JzogaXRlbUxlZnQsDQogICAgICAgICAgICAgICAgJ3RvcCc6IGl0ZW1Ub3AsDQog ICAgICAgICAgICAgICAgJ3dpZHRoJzogd2lkdGggKyAncHgnLA0KICAgICAgICAg ICAgICAgICdoZWlnaHQnOiBoZWlnaHQgKyAncHgnDQogICAgICAgICAgICB9Ow0K DQogICAgICAgICAgICBpZiAoJCgiI2ZhbmN5X291dGVyIikuaXMoIjp2aXNpYmxl IikpIHsNCiAgICAgICAgICAgICAgICAkKCIjZmFuY3lfY29udGVudCIpLmZhZGVP dXQoIm5vcm1hbCIsIGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgICAgICAgICAk KCIjZmFuY3lfY29udGVudCIpLmVtcHR5KCk7DQogICAgICAgICAgICAgICAgICAg ICQoIiNmYW5jeV9vdXRlciIpLmFuaW1hdGUoaXRlbU9wdHMsIG9wdHMuem9vbVNw ZWVkQ2hhbmdlLCBvcHRzLmVhc2luZ0NoYW5nZSwgZnVuY3Rpb24oKSB7DQogICAg ICAgICAgICAgICAgICAgICAgICAkKCIjZmFuY3lfY29udGVudCIpLmFwcGVuZCgk KHZhbHVlKSkuZmFkZUluKCJub3JtYWwiLCBmdW5jdGlvbigpIHsNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfZmluaXNoKCk7DQogICAgICAgICAgICAgICAg ICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAg ICAgICAgfSk7DQoNCiAgICAgICAgICAgIH0gZWxzZSB7DQoNCiAgICAgICAgICAg ICAgICBpZiAob3B0cy56b29tU3BlZWRJbiA+IDAgJiYgb3B0cy5pdGVtQXJyYXlb b3B0cy5pdGVtQ3VycmVudF0ub3JpZyAhPT0gdW5kZWZpbmVkKSB7DQogICAgICAg ICAgICAgICAgICAgICQoIiNmYW5jeV9jb250ZW50IikuZW1wdHkoKS5hcHBlbmQo JCh2YWx1ZSkpOw0KDQogICAgICAgICAgICAgICAgICAgIHZhciBvcmlnX2l0ZW0g PSBvcHRzLml0ZW1BcnJheVtvcHRzLml0ZW1DdXJyZW50XS5vcmlnOw0KICAgICAg ICAgICAgICAgICAgICB2YXIgb3JpZ19wb3MgPSAkLmZuLmZhbmN5Ym94LmdldFBv c2l0aW9uKG9yaWdfaXRlbSk7DQoNCiAgICAgICAgICAgICAgICAgICAgJCgiI2Zh bmN5X291dGVyIikuY3NzKHsNCiAgICAgICAgICAgICAgICAgICAgICAgICdsZWZ0 JzogKG9yaWdfcG9zLmxlZnQgLSAxOCkgKyAncHgnLA0KICAgICAgICAgICAgICAg ICAgICAgICAgJ3RvcCc6IChvcmlnX3Bvcy50b3AgLSAxOCkgKyAncHgnLA0KICAg ICAgICAgICAgICAgICAgICAgICAgJ3dpZHRoJzogJChvcmlnX2l0ZW0pLndpZHRo KCksDQogICAgICAgICAgICAgICAgICAgICAgICAnaGVpZ2h0JzogJChvcmlnX2l0 ZW0pLmhlaWdodCgpDQogICAgICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAg ICAgICAgICAgICAgIGlmIChvcHRzLnpvb21PcGFjaXR5KSB7DQogICAgICAgICAg ICAgICAgICAgICAgICBpdGVtT3B0cy5vcGFjaXR5ID0gJ3Nob3cnOw0KICAgICAg ICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgJCgiI2ZhbmN5 X291dGVyIikuYW5pbWF0ZShpdGVtT3B0cywgb3B0cy56b29tU3BlZWRJbiwgb3B0 cy5lYXNpbmdJbiwgZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgICAgICAgICAg ICBfZmluaXNoKCk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAg ICAgICAgICAgfSBlbHNlIHsNCg0KICAgICAgICAgICAgICAgICAgICAkKCIjZmFu Y3lfY29udGVudCIpLmhpZGUoKS5lbXB0eSgpLmFwcGVuZCgkKHZhbHVlKSkuc2hv dygpOw0KICAgICAgICAgICAgICAgICAgICAkKCIjZmFuY3lfb3V0ZXIiKS5jc3Mo aXRlbU9wdHMpLmZhZGVJbigibm9ybWFsIiwgZnVuY3Rpb24oKSB7DQogICAgICAg ICAgICAgICAgICAgICAgICBfZmluaXNoKCk7DQogICAgICAgICAgICAgICAgICAg IH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAg fTsNCg0KICAgICAgICBmdW5jdGlvbiBfc2V0X25hdmlnYXRpb24oKSB7DQogICAg ICAgICAgICBpZiAob3B0cy5pdGVtQ3VycmVudCAhPSAwKSB7DQogICAgICAgICAg ICAgICAgJCgiI2ZhbmN5X2xlZnQsICNmYW5jeV9sZWZ0X2ljbyIpLnVuYmluZCgp LmJpbmQoImNsaWNrIiwgZnVuY3Rpb24oZSkgew0KICAgICAgICAgICAgICAgICAg ICBlLnN0b3BQcm9wYWdhdGlvbigpOw0KDQogICAgICAgICAgICAgICAgICAgIG9w dHMuaXRlbUN1cnJlbnQtLTsNCiAgICAgICAgICAgICAgICAgICAgX2NoYW5nZV9p dGVtKCk7DQoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAg ICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgJCgiI2ZhbmN5X2xl ZnQiKS5zaG93KCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmIChv cHRzLml0ZW1DdXJyZW50ICE9IChvcHRzLml0ZW1BcnJheS5sZW5ndGggLSAxKSkg ew0KICAgICAgICAgICAgICAgICQoIiNmYW5jeV9yaWdodCwgI2ZhbmN5X3JpZ2h0 X2ljbyIpLnVuYmluZCgpLmJpbmQoImNsaWNrIiwgZnVuY3Rpb24oZSkgew0KICAg ICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOw0KDQogICAgICAg ICAgICAgICAgICAgIG9wdHMuaXRlbUN1cnJlbnQrKzsNCiAgICAgICAgICAgICAg ICAgICAgX2NoYW5nZV9pdGVtKCk7DQoNCiAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAg ICAgJCgiI2ZhbmN5X3JpZ2h0Iikuc2hvdygpOw0KICAgICAgICAgICAgfQ0KICAg ICAgICB9Ow0KDQogICAgICAgIGZ1bmN0aW9uIF9maW5pc2goKSB7DQogICAgICAg ICAgICBfc2V0X25hdmlnYXRpb24oKTsNCg0KICAgICAgICAgICAgX3ByZWxvYWRf bmVpZ2hib3JfaW1hZ2VzKCk7DQoNCiAgICAgICAgICAgICQoZG9jdW1lbnQpLmtl eWRvd24oZnVuY3Rpb24oZSkgew0KICAgICAgICAgICAgICAgIGlmIChlLmtleUNv ZGUgPT0gMjcpIHsNCiAgICAgICAgICAgICAgICAgICAgJC5mbi5mYW5jeWJveC5j bG9zZSgpOw0KICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS51bmJpbmQo ImtleWRvd24iKTsNCg0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5rZXlD b2RlID09IDM3ICYmIG9wdHMuaXRlbUN1cnJlbnQgIT0gMCkgew0KICAgICAgICAg ICAgICAgICAgICBvcHRzLml0ZW1DdXJyZW50LS07DQogICAgICAgICAgICAgICAg ICAgIF9jaGFuZ2VfaXRlbSgpOw0KICAgICAgICAgICAgICAgICAgICAkKGRvY3Vt ZW50KS51bmJpbmQoImtleWRvd24iKTsNCg0KICAgICAgICAgICAgICAgIH0gZWxz ZSBpZiAoZS5rZXlDb2RlID09IDM5ICYmIG9wdHMuaXRlbUN1cnJlbnQgIT0gKG9w dHMuaXRlbUFycmF5Lmxlbmd0aCAtIDEpKSB7DQogICAgICAgICAgICAgICAgICAg IG9wdHMuaXRlbUN1cnJlbnQrKzsNCiAgICAgICAgICAgICAgICAgICAgX2NoYW5n ZV9pdGVtKCk7DQogICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLnVuYmlu ZCgia2V5ZG93biIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0p Ow0KDQogICAgICAgICAgICBpZiAob3B0cy5jZW50ZXJPblNjcm9sbCkgew0KICAg ICAgICAgICAgICAgICQod2luZG93KS5iaW5kKCJyZXNpemUgc2Nyb2xsIiwgJC5m bi5mYW5jeWJveC5zY3JvbGxCb3gpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAg ICAgICAgICAgICAgICAkKCJkaXYjZmFuY3lfb3V0ZXIiKS5jc3MoInBvc2l0aW9u IiwgImFic29sdXRlIik7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlm IChvcHRzLmhpZGVPbkNvbnRlbnRDbGljaykgew0KICAgICAgICAgICAgICAgICQo IiNmYW5jeV93cmFwIikuY2xpY2soJC5mbi5mYW5jeWJveC5jbG9zZSk7DQogICAg ICAgICAgICB9DQoNCiAgICAgICAgICAgICQoIiNmYW5jeV9vdmVybGF5LCAjZmFu Y3lfY2xvc2UiKS5iaW5kKCJjbGljayIsICQuZm4uZmFuY3lib3guY2xvc2UpOw0K DQogICAgICAgICAgICAkKCIjZmFuY3lfY2xvc2UiKS5zaG93KCk7DQoNCiAgICAg ICAgICAgIGlmIChvcHRzLml0ZW1BcnJheVtvcHRzLml0ZW1DdXJyZW50XS50aXRs ZSAhPT0gdW5kZWZpbmVkICYmIG9wdHMuaXRlbUFycmF5W29wdHMuaXRlbUN1cnJl bnRdLnRpdGxlLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgICAgICAkKCcjZmFu Y3lfdGl0bGUgZGl2JykuaHRtbChvcHRzLml0ZW1BcnJheVtvcHRzLml0ZW1DdXJy ZW50XS50aXRsZSk7DQogICAgICAgICAgICAgICAgJCgnI2ZhbmN5X3RpdGxlJyku c2hvdygpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAob3B0cy5v dmVybGF5U2hvdyAmJiBpc0lFKSB7DQogICAgICAgICAgICAgICAgJCgnZW1iZWQs IG9iamVjdCwgc2VsZWN0JywgJCgnI2ZhbmN5X2NvbnRlbnQnKSkuY3NzKCd2aXNp YmlsaXR5JywgJ3Zpc2libGUnKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAg ICAgaWYgKCQuaXNGdW5jdGlvbihvcHRzLmNhbGxiYWNrT25TaG93KSkgew0KICAg ICAgICAgICAgICAgIG9wdHMuY2FsbGJhY2tPblNob3coKTsNCiAgICAgICAgICAg IH0NCg0KICAgICAgICAgICAgYnVzeSA9IGZhbHNlOw0KICAgICAgICB9Ow0KDQog ICAgICAgIHJldHVybiB0aGlzLnVuYmluZCgnY2xpY2snKS5jbGljayhfaW5pdGlh bGl6ZSk7DQogICAgfTsNCg0KICAgICQuZm4uZmFuY3lib3guc2Nyb2xsQm94ID0g ZnVuY3Rpb24oKSB7DQogICAgICAgIHZhciBwb3MgPSAkLmZuLmZhbmN5Ym94Lmdl dFZpZXdwb3J0KCk7DQoNCiAgICAgICAgJCgiI2ZhbmN5X291dGVyIikuY3NzKCds ZWZ0JywgKCgkKCIjZmFuY3lfb3V0ZXIiKS53aWR0aCgpICsgMzYpID4gcG9zWzBd ID8gcG9zWzJdIDogcG9zWzJdICsgTWF0aC5yb3VuZCgocG9zWzBdIC0gJCgiI2Zh bmN5X291dGVyIikud2lkdGgoKSAtIDM2KSAvIDIpKSk7DQogICAgICAgICQoIiNm YW5jeV9vdXRlciIpLmNzcygndG9wJywgKCgkKCIjZmFuY3lfb3V0ZXIiKS5oZWln aHQoKSArIDUwKSA+IHBvc1sxXSA/IHBvc1szXSA6IHBvc1szXSArIE1hdGgucm91 bmQoKHBvc1sxXSAtICQoIiNmYW5jeV9vdXRlciIpLmhlaWdodCgpIC0gNTApIC8g MikpKTsNCiAgICB9Ow0KDQogICAgJC5mbi5mYW5jeWJveC5nZXROdW1lcmljID0g ZnVuY3Rpb24oZWwsIHByb3ApIHsNCiAgICAgICAgcmV0dXJuIHBhcnNlSW50KCQu Y3VyQ1NTKGVsLmpxdWVyeSA/IGVsWzBdIDogZWwsIHByb3AsIHRydWUpKSB8fCAw Ow0KICAgIH07DQoNCiAgICAkLmZuLmZhbmN5Ym94LmdldFBvc2l0aW9uID0gZnVu Y3Rpb24oZWwpIHsNCiAgICAgICAgdmFyIHBvcyA9IGVsLm9mZnNldCgpOw0KDQog ICAgICAgIHBvcy50b3AgKz0gJC5mbi5mYW5jeWJveC5nZXROdW1lcmljKGVsLCAn cGFkZGluZ1RvcCcpOw0KICAgICAgICBwb3MudG9wICs9ICQuZm4uZmFuY3lib3gu Z2V0TnVtZXJpYyhlbCwgJ2JvcmRlclRvcFdpZHRoJyk7DQoNCiAgICAgICAgcG9z LmxlZnQgKz0gJC5mbi5mYW5jeWJveC5nZXROdW1lcmljKGVsLCAncGFkZGluZ0xl ZnQnKTsNCiAgICAgICAgcG9zLmxlZnQgKz0gJC5mbi5mYW5jeWJveC5nZXROdW1l cmljKGVsLCAnYm9yZGVyTGVmdFdpZHRoJyk7DQoNCiAgICAgICAgcmV0dXJuIHBv czsNCiAgICB9Ow0KDQogICAgJC5mbi5mYW5jeWJveC5zaG93SWZyYW1lID0gZnVu Y3Rpb24oKSB7DQogICAgICAgICQoIi5mYW5jeV9sb2FkaW5nIikuaGlkZSgpOw0K ICAgICAgICAkKCIjZmFuY3lfZnJhbWUiKS5zaG93KCk7DQogICAgfTsNCg0KICAg ICQuZm4uZmFuY3lib3guZ2V0Vmlld3BvcnQgPSBmdW5jdGlvbigpIHsNCiAgICAg ICAgcmV0dXJuIFskKHdpbmRvdykud2lkdGgoKSwgJCh3aW5kb3cpLmhlaWdodCgp LCAkKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCksICQoZG9jdW1lbnQpLnNjcm9sbFRv cCgpXTsNCiAgICB9Ow0KDQogICAgJC5mbi5mYW5jeWJveC5hbmltYXRlTG9hZGlu ZyA9IGZ1bmN0aW9uKCkgew0KICAgICAgICBpZiAoISQoIiNmYW5jeV9sb2FkaW5n IikuaXMoJzp2aXNpYmxlJykpIHsNCiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwo bG9hZGluZ1RpbWVyKTsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0K DQogICAgICAgICQoIiNmYW5jeV9sb2FkaW5nID4gZGl2IikuY3NzKCd0b3AnLCAo bG9hZGluZ0ZyYW1lICogLTQwKSArICdweCcpOw0KDQogICAgICAgIGxvYWRpbmdG cmFtZSA9IChsb2FkaW5nRnJhbWUgKyAxKSAlIDEyOw0KICAgIH07DQoNCiAgICAk LmZuLmZhbmN5Ym94LnNob3dMb2FkaW5nID0gZnVuY3Rpb24oKSB7DQogICAgICAg IGNsZWFySW50ZXJ2YWwobG9hZGluZ1RpbWVyKTsNCg0KICAgICAgICB2YXIgcG9z ID0gJC5mbi5mYW5jeWJveC5nZXRWaWV3cG9ydCgpOw0KDQogICAgICAgICQoIiNm YW5jeV9sb2FkaW5nIikuY3NzKHsgJ2xlZnQnOiAoKHBvc1swXSAtIDQwKSAvIDIg KyBwb3NbMl0pLCAndG9wJzogKChwb3NbMV0gLSA0MCkgLyAyICsgcG9zWzNdKSB9 KS5zaG93KCk7DQogICAgICAgICQoIiNmYW5jeV9sb2FkaW5nIikuYmluZCgnY2xp Y2snLCAkLmZuLmZhbmN5Ym94LmNsb3NlKTsNCg0KICAgICAgICBsb2FkaW5nVGlt ZXIgPSBzZXRJbnRlcnZhbCgkLmZuLmZhbmN5Ym94LmFuaW1hdGVMb2FkaW5nLCA2 Nik7DQogICAgfTsNCg0KICAgICQuZm4uZmFuY3lib3guY2xvc2UgPSBmdW5jdGlv bigpIHsNCiAgICAgICAgYnVzeSA9IHRydWU7DQoNCiAgICAgICAgJChpbWFnZVBy ZWxvYWRlcikudW5iaW5kKCk7DQoNCiAgICAgICAgJCgiI2ZhbmN5X292ZXJsYXks ICNmYW5jeV9jbG9zZSIpLnVuYmluZCgpOw0KDQogICAgICAgIGlmIChvcHRzLmhp ZGVPbkNvbnRlbnRDbGljaykgew0KICAgICAgICAgICAgJCgiI2ZhbmN5X3dyYXAi KS51bmJpbmQoKTsNCiAgICAgICAgfQ0KDQogICAgICAgICQoIiNmYW5jeV9jbG9z ZSwgLmZhbmN5X2xvYWRpbmcsICNmYW5jeV9sZWZ0LCAjZmFuY3lfcmlnaHQsICNm YW5jeV90aXRsZSIpLmhpZGUoKTsNCg0KICAgICAgICBpZiAob3B0cy5jZW50ZXJP blNjcm9sbCkgew0KICAgICAgICAgICAgJCh3aW5kb3cpLnVuYmluZCgicmVzaXpl IHNjcm9sbCIpOw0KICAgICAgICB9DQoNCiAgICAgICAgX19jbGVhbnVwID0gZnVu Y3Rpb24oKSB7DQogICAgICAgICAgICAkKCIjZmFuY3lfb3ZlcmxheSwgI2ZhbmN5 X291dGVyIikuaGlkZSgpOw0KDQogICAgICAgICAgICBpZiAob3B0cy5jZW50ZXJP blNjcm9sbCkgew0KICAgICAgICAgICAgICAgICQod2luZG93KS51bmJpbmQoInJl c2l6ZSBzY3JvbGwiKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYg KGlzSUUpIHsNCiAgICAgICAgICAgICAgICAkKCdlbWJlZCwgb2JqZWN0LCBzZWxl Y3QnKS5jc3MoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpOw0KICAgICAgICAgICAg fQ0KDQogICAgICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKG9wdHMuY2FsbGJhY2tP bkNsb3NlKSkgew0KICAgICAgICAgICAgICAgIG9wdHMuY2FsbGJhY2tPbkNsb3Nl KCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGJ1c3kgPSBmYWxzZTsN CiAgICAgICAgfTsNCg0KICAgICAgICBpZiAoJCgiI2ZhbmN5X291dGVyIikuaXMo Ijp2aXNpYmxlIikgIT09IGZhbHNlKSB7DQogICAgICAgICAgICBpZiAob3B0cy56 b29tU3BlZWRPdXQgPiAwICYmIG9wdHMuaXRlbUFycmF5W29wdHMuaXRlbUN1cnJl bnRdLm9yaWcgIT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgIHZhciBv cmlnX2l0ZW0gPSBvcHRzLml0ZW1BcnJheVtvcHRzLml0ZW1DdXJyZW50XS5vcmln Ow0KICAgICAgICAgICAgICAgIHZhciBvcmlnX3BvcyA9ICQuZm4uZmFuY3lib3gu Z2V0UG9zaXRpb24ob3JpZ19pdGVtKTsNCg0KICAgICAgICAgICAgICAgIHZhciBp dGVtT3B0cyA9IHsNCiAgICAgICAgICAgICAgICAgICAgJ2xlZnQnOiAob3JpZ19w b3MubGVmdCAtIDE4KSArICdweCcsDQogICAgICAgICAgICAgICAgICAgICd0b3An OiAob3JpZ19wb3MudG9wIC0gMTgpICsgJ3B4JywNCiAgICAgICAgICAgICAgICAg ICAgJ3dpZHRoJzogJChvcmlnX2l0ZW0pLndpZHRoKCksDQogICAgICAgICAgICAg ICAgICAgICdoZWlnaHQnOiAkKG9yaWdfaXRlbSkuaGVpZ2h0KCkNCiAgICAgICAg ICAgICAgICB9Ow0KDQogICAgICAgICAgICAgICAgaWYgKG9wdHMuem9vbU9wYWNp dHkpIHsNCiAgICAgICAgICAgICAgICAgICAgaXRlbU9wdHMub3BhY2l0eSA9ICdo aWRlJzsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAkKCIj ZmFuY3lfb3V0ZXIiKS5zdG9wKGZhbHNlLCB0cnVlKS5hbmltYXRlKGl0ZW1PcHRz LCBvcHRzLnpvb21TcGVlZE91dCwgb3B0cy5lYXNpbmdPdXQsIF9fY2xlYW51cCk7 DQoNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJCgiI2Zh bmN5X291dGVyIikuc3RvcChmYWxzZSwgdHJ1ZSkuZmFkZU91dCgiZmFzdCIsIF9f Y2xlYW51cCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgfSBlbHNlIHsNCiAg ICAgICAgICAgIF9fY2xlYW51cCgpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0 dXJuIGZhbHNlOw0KICAgIH07DQoNCiAgICAkLmZuLmZhbmN5Ym94LmJ1aWxkID0g ZnVuY3Rpb24oKSB7DQogICAgICAgIHZhciBodG1sID0gJyc7DQoNCiAgICAgICAg aHRtbCArPSAnPGRpdiBpZD0iZmFuY3lfb3ZlcmxheSI+PC9kaXY+JzsNCg0KICAg ICAgICBodG1sICs9ICc8ZGl2IGlkPSJmYW5jeV93cmFwIj4nOw0KDQogICAgICAg IGh0bWwgKz0gJzxkaXYgY2xhc3M9ImZhbmN5X2xvYWRpbmciIGlkPSJmYW5jeV9s b2FkaW5nIj48ZGl2PjwvZGl2PjwvZGl2Pic7DQoNCiAgICAgICAgaHRtbCArPSAn PGRpdiBpZD0iZmFuY3lfb3V0ZXIiPic7DQoNCiAgICAgICAgaHRtbCArPSAnPGRp diBpZD0iZmFuY3lfaW5uZXIiPic7DQoNCiAgICAgICAgaHRtbCArPSAnPGRpdiBp ZD0iZmFuY3lfY2xvc2UiPjwvZGl2Pic7DQoNCiAgICAgICAgaHRtbCArPSAnPGRp diBpZD0iZmFuY3lfYmciPjxkaXYgY2xhc3M9ImZhbmN5X2JnIGZhbmN5X2JnX24i PjwvZGl2PjxkaXYgY2xhc3M9ImZhbmN5X2JnIGZhbmN5X2JnX25lIj48L2Rpdj48 ZGl2IGNsYXNzPSJmYW5jeV9iZyBmYW5jeV9iZ19lIj48L2Rpdj48ZGl2IGNsYXNz PSJmYW5jeV9iZyBmYW5jeV9iZ19zZSI+PC9kaXY+PGRpdiBjbGFzcz0iZmFuY3lf YmcgZmFuY3lfYmdfcyI+PC9kaXY+PGRpdiBjbGFzcz0iZmFuY3lfYmcgZmFuY3lf Ymdfc3ciPjwvZGl2PjxkaXYgY2xhc3M9ImZhbmN5X2JnIGZhbmN5X2JnX3ciPjwv ZGl2PjxkaXYgY2xhc3M9ImZhbmN5X2JnIGZhbmN5X2JnX253Ij48L2Rpdj48L2Rp dj4nOw0KDQogICAgICAgIGh0bWwgKz0gJzxhIGhyZWY9ImphdmFzY3JpcHQ6OyIg aWQ9ImZhbmN5X2xlZnQiPjxzcGFuIGNsYXNzPSJmYW5jeV9pY28iIGlkPSJmYW5j eV9sZWZ0X2ljbyI+PC9zcGFuPjwvYT48YSBocmVmPSJqYXZhc2NyaXB0OjsiIGlk PSJmYW5jeV9yaWdodCI+PHNwYW4gY2xhc3M9ImZhbmN5X2ljbyIgaWQ9ImZhbmN5 X3JpZ2h0X2ljbyI+PC9zcGFuPjwvYT4nOw0KDQogICAgICAgIGh0bWwgKz0gJzxk aXYgaWQ9ImZhbmN5X2NvbnRlbnQiPjwvZGl2Pic7DQoNCiAgICAgICAgaHRtbCAr PSAnPGRpdiBpZD0iZmFuY3lfdGl0bGUiPjwvZGl2Pic7DQoNCiAgICAgICAgaHRt bCArPSAnPC9kaXY+JzsNCg0KICAgICAgICBodG1sICs9ICc8L2Rpdj4nOw0KDQog ICAgICAgIGh0bWwgKz0gJzwvZGl2Pic7DQoNCiAgICAgICAgJChodG1sKS5hcHBl bmRUbygiYm9keSIpOw0KDQogICAgICAgICQoJzx0YWJsZSBjZWxsc3BhY2luZz0i MCIgY2VsbHBhZGRpbmc9IjAiIGJvcmRlcj0iMCI+PHRyPjx0ZCBjbGFzcz0iZmFu Y3lfdGl0bGUiIGlkPSJmYW5jeV90aXRsZV9sZWZ0Ij48L3RkPjx0ZCBjbGFzcz0i ZmFuY3lfdGl0bGUiIGlkPSJmYW5jeV90aXRsZV9tYWluIj48ZGl2PjwvZGl2Pjwv dGQ+PHRkIGNsYXNzPSJmYW5jeV90aXRsZSIgaWQ9ImZhbmN5X3RpdGxlX3JpZ2h0 Ij48L3RkPjwvdHI+PC90YWJsZT4nKS5hcHBlbmRUbygnI2ZhbmN5X3RpdGxlJyk7 DQoNCiAgICAgICAgaWYgKGlzSUUpIHsNCiAgICAgICAgICAgICQoIiNmYW5jeV9p bm5lciIpLnByZXBlbmQoJzxpZnJhbWUgc3JjPSJibGFuay5odG1sIiBjbGFzcz0i ZmFuY3lfYmlnSWZyYW1lIiBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0iMCI+ PC9pZnJhbWU+Jyk7DQogICAgICAgICAgICAkKCIjZmFuY3lfY2xvc2UsIC5mYW5j eV9iZywgLmZhbmN5X3RpdGxlLCAuZmFuY3lfaWNvIikuZml4UE5HKCk7DQogICAg ICAgIH0NCiAgICB9Ow0KDQogICAgJC5mbi5mYW5jeWJveC5kZWZhdWx0cyA9IHsN CiAgICAgICAgcGFkZGluZzogMTAsDQogICAgICAgIGltYWdlU2NhbGU6IHRydWUs DQogICAgICAgIHpvb21PcGFjaXR5OiBmYWxzZSwNCiAgICAgICAgem9vbVNwZWVk SW46IDAsDQogICAgICAgIHpvb21TcGVlZE91dDogMCwNCiAgICAgICAgem9vbVNw ZWVkQ2hhbmdlOiAzMDAsDQogICAgICAgIGVhc2luZ0luOiAnc3dpbmcnLA0KICAg ICAgICBlYXNpbmdPdXQ6ICdzd2luZycsDQogICAgICAgIGVhc2luZ0NoYW5nZTog J3N3aW5nJywNCiAgICAgICAgZnJhbWVXaWR0aDogNDI1LA0KICAgICAgICBmcmFt ZUhlaWdodDogMzU1LA0KICAgICAgICBvdmVybGF5U2hvdzogdHJ1ZSwNCiAgICAg ICAgb3ZlcmxheU9wYWNpdHk6IDAuMywNCiAgICAgICAgaGlkZU9uQ29udGVudENs aWNrOiB0cnVlLA0KICAgICAgICBjZW50ZXJPblNjcm9sbDogdHJ1ZSwNCiAgICAg ICAgaXRlbUFycmF5OiBbXSwNCiAgICAgICAgY2FsbGJhY2tPblN0YXJ0OiBudWxs LA0KICAgICAgICBjYWxsYmFja09uU2hvdzogbnVsbCwNCiAgICAgICAgY2FsbGJh Y2tPbkNsb3NlOiBudWxsDQogICAgfTsNCg0KICAgICQoZG9jdW1lbnQpLnJlYWR5 KGZ1bmN0aW9uKCkgew0KICAgICAgICAkLmZuLmZhbmN5Ym94LmJ1aWxkKCk7DQog ICAgfSk7DQoNCn0pKGpRdWVyeSk7 ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline; filename=jquery.fancybox.css Content-Type: text/css; charset=iso-8859-1; name=jquery.fancybox.css Content-Location: http://bop.diba.es/js/fancybox/jquery.fancybox.css Content-Transfer-Encoding: 8bit html, body { height: 100%; } div#fancy_overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: #000; display: none; z-index: 30; } * html div#fancy_overlay { position: absolute; height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px'); } div#fancy_wrap { text-align: left; } div#fancy_loading { position: absolute; height: 40px; width: 40px; cursor: pointer; display: none; overflow: hidden; background: transparent; z-index: 100; } div#fancy_loading div { position: absolute; top: 0; left: 0; width: 40px; height: 480px; background: transparent url('fancy_progress.png') no-repeat; } div#fancy_loading_overlay { position: absolute; background-color: #FFF; z-index: 30; } div#fancy_loading_icon { position: absolute; background: url('fancy_loading.gif') no-repeat; z-index: 35; width: 16px; height: 16px; } div#fancy_outer { position: absolute; top: 0; left: 0; z-index: 90; padding: 18px 18px 33px 18px; margin: 0; overflow: hidden; background: transparent; display: none; } div#fancy_inner { position: relative; width:100%; height:100%; border: 1px solid #BBB; background: #FFF; } div#fancy_content { margin: 0; z-index: 100; position: absolute; } div#fancy_div { background: #000; color: #FFF; height: 100%; width: 100%; z-index: 100; } img#fancy_img { position: absolute; top: 0; left: 0; border:0; padding: 0; margin: 0; z-index: 100; width: 100%; height: 100%; } div#fancy_close { position: absolute; top: -12px; right: -15px; height: 30px; width: 30px; background: url('fancy_closebox.png') top left no-repeat; cursor: pointer; z-index: 181; display: none; } #fancy_frame { position: relative; width: 100%; height: 100%; display: none; } #fancy_ajax { width: 100%; height: 100%; overflow: auto; } a#fancy_left, a#fancy_right { position: absolute; bottom: 0px; height: 100%; width: 35%; cursor: pointer; z-index: 111; display: none; background-image: url(../../img/blank.gif); outline: none; } a#fancy_left { left: 0px; } a#fancy_right { right: 0px; } span.fancy_ico { position: absolute; top: 50%; margin-top: -15px; width: 30px; height: 30px; z-index: 112; cursor: pointer; display: block; } span#fancy_left_ico { left: -9999px; background: transparent url('fancy_left.png') no-repeat; } span#fancy_right_ico { right: -9999px; background: transparent url('fancy_right.png') no-repeat; } a#fancy_left:hover { visibility: visible; } a#fancy_right:hover { visibility: visible; } a#fancy_left:hover span { left: 20px; } a#fancy_right:hover span { right: 20px; } .fancy_bigIframe { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: transparent; } div#fancy_bg { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 70; border: 0; padding: 0; margin: 0; } div.fancy_bg { position: absolute; display: block; z-index: 70; border: 0; padding: 0; margin: 0; } div.fancy_bg_n { top: -18px; width: 100%; height: 18px; background: transparent url('fancy_shadow_n.png') repeat-x; } div.fancy_bg_ne { top: -18px; right: -13px; width: 13px; height: 18px; background: transparent url('fancy_shadow_ne.png') no-repeat; } div.fancy_bg_e { right: -13px; height: 100%; width: 13px; background: transparent url('fancy_shadow_e.png') repeat-y; } div.fancy_bg_se { bottom: -18px; right: -13px; width: 13px; height: 18px; background: transparent url('fancy_shadow_se.png') no-repeat; } div.fancy_bg_s { bottom: -18px; width: 100%; height: 18px; background: transparent url('fancy_shadow_s.png') repeat-x; } div.fancy_bg_sw { bottom: -18px; left: -13px; width: 13px; height: 18px; background: transparent url('fancy_shadow_sw.png') no-repeat; } div.fancy_bg_w { left: -13px; height: 100%; width: 13px; background: transparent url('fancy_shadow_w.png') repeat-y; } div.fancy_bg_nw { top: -18px; left: -13px; width: 13px; height: 18px; background: transparent url('fancy_shadow_nw.png') no-repeat; } div#fancy_title { position: absolute; bottom: -33px; left: 0; width: 100%; z-index: 100; display: none; } div#fancy_title div { color: #FFF; font: bold 12px Arial; padding-bottom: 3px; } div#fancy_title table { margin: 0 auto; } div#fancy_title table td { padding: 0; vertical-align: middle; } td#fancy_title_left { height: 32px; width: 15px; background: transparent url(fancy_title_left.png) repeat-x; } td#fancy_title_main { height: 32px; background: transparent url(fancy_title_main.png) repeat-x; } td#fancy_title_right { height: 32px; width: 15px; background: transparent url(fancy_title_right.png) repeat-x; } ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline Content-Type: text/css; charset=iso-8859-1 Content-Location: http://bop.diba.es/js/datepicker/development-bundle/themes/base/ui.base.css Content-Transfer-Encoding: 8bit @import url("ui.core.css"); @import url("ui.datepicker.css"); ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline Content-Type: text/css; charset=iso-8859-1 Content-Location: http://bop.diba.es/js/datepicker/development-bundle/themes/base/ui.core.css Content-Transfer-Encoding: 8bit /* * jQuery UI CSS Framework * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. */ /* Layout helpers ----------------------------------*/ .ui-helper-hidden { display: none; } .ui-helper-hidden-accessible { position: absolute; left: -99999999px; } .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } .ui-helper-clearfix { display: inline-block; } /* required comment for clearfix to work in Opera \*/ * html .ui-helper-clearfix { height:1%; } .ui-helper-clearfix { display:block; } /* end clearfix */ .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } /* Interaction Cues ----------------------------------*/ .ui-state-disabled { cursor: default !important; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } /* Misc visuals ----------------------------------*/ /* Overlays */ .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline Content-Type: text/css; charset=iso-8859-1 Content-Location: http://bop.diba.es/js/datepicker/development-bundle/themes/base/ui.datepicker.css Content-Transfer-Encoding: 8bit /* Datepicker ----------------------------------*/ .ui-datepicker { width: 17em; padding: .2em .2em 0; } .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } .ui-datepicker .ui-datepicker-prev { left:2px; } .ui-datepicker .ui-datepicker-next { right:2px; } .ui-datepicker .ui-datepicker-prev-hover { left:1px; } .ui-datepicker .ui-datepicker-next-hover { right:1px; } .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } .ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; } .ui-datepicker select.ui-datepicker-month-year {width: 100%;} .ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year { width: 49%;} .ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; } .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } .ui-datepicker td { border: 0; padding: 1px; } .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } /* with multiple calendars */ .ui-datepicker.ui-datepicker-multi { width:auto; } .ui-datepicker-multi .ui-datepicker-group { float:left; } .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } .ui-datepicker-row-break { clear:both; width:100%; } /* RTL support */ .ui-datepicker-rtl { direction: rtl; } .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } .ui-datepicker-rtl .ui-datepicker-group { float:right; } .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ .ui-datepicker-cover { display: none; /*sorry for IE5*/ display/**/: block; /*sorry for IE5*/ position: absolute; /*must have*/ z-index: -1; /*must have*/ filter: mask(); /*must have*/ top: -4px; /*must have*/ left: -4px; /*must have*/ width: 200px; /*must have*/ height: 200px; /*must have*/ } ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline Content-Type: text/css; charset=iso-8859-1 Content-Location: http://bop.diba.es/js/datepicker/development-bundle/themes/base/ui.theme.css Content-Transfer-Encoding: 8bit /* * jQuery UI CSS Framework * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. * To view and modify this theme, visit http://jqueryui.com/themeroller/ */ /* Component containers ----------------------------------*/ .ui-widget { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; } .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1em; } .ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; } .ui-widget-content a { color: #222222/*{fcContent}*/; } .ui-widget-header { border: 1px solid #aaaaaa/*{borderColorHeader}*/; background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; color: #222222/*{fcHeader}*/; font-weight: bold; } .ui-widget-header a { color: #222222/*{fcHeader}*/; } /* Interaction states ----------------------------------*/ .ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; outline: none; } .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; text-decoration: none; outline: none; } .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #999999/*{borderColorHover}*/; background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; outline: none; } .ui-state-hover a, .ui-state-hover a:hover { color: #212121/*{fcHover}*/; text-decoration: none; outline: none; } .ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; outline: none; } .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; outline: none; text-decoration: none; } /* Interaction Cues ----------------------------------*/ .ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fcefa1/*{borderColorHighlight}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; } .ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636/*{fcHighlight}*/; } .ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; } .ui-state-error a, .ui-widget-content .ui-state-error a { color: #cd0a0a/*{fcError}*/; } .ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #cd0a0a/*{fcError}*/; } .ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } .ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; } .ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } .ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } .ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; } .ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; } .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; } .ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; } .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; } .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; } /* positioning */ .ui-icon-carat-1-n { background-position: 0 0; } .ui-icon-carat-1-ne { background-position: -16px 0; } .ui-icon-carat-1-e { background-position: -32px 0; } .ui-icon-carat-1-se { background-position: -48px 0; } .ui-icon-carat-1-s { background-position: -64px 0; } .ui-icon-carat-1-sw { background-position: -80px 0; } .ui-icon-carat-1-w { background-position: -96px 0; } .ui-icon-carat-1-nw { background-position: -112px 0; } .ui-icon-carat-2-n-s { background-position: -128px 0; } .ui-icon-carat-2-e-w { background-position: -144px 0; } .ui-icon-triangle-1-n { background-position: 0 -16px; } .ui-icon-triangle-1-ne { background-position: -16px -16px; } .ui-icon-triangle-1-e { background-position: -32px -16px; } .ui-icon-triangle-1-se { background-position: -48px -16px; } .ui-icon-triangle-1-s { background-position: -64px -16px; } .ui-icon-triangle-1-sw { background-position: -80px -16px; } .ui-icon-triangle-1-w { background-position: -96px -16px; } .ui-icon-triangle-1-nw { background-position: -112px -16px; } .ui-icon-triangle-2-n-s { background-position: -128px -16px; } .ui-icon-triangle-2-e-w { background-position: -144px -16px; } .ui-icon-arrow-1-n { background-position: 0 -32px; } .ui-icon-arrow-1-ne { background-position: -16px -32px; } .ui-icon-arrow-1-e { background-position: -32px -32px; } .ui-icon-arrow-1-se { background-position: -48px -32px; } .ui-icon-arrow-1-s { background-position: -64px -32px; } .ui-icon-arrow-1-sw { background-position: -80px -32px; } .ui-icon-arrow-1-w { background-position: -96px -32px; } .ui-icon-arrow-1-nw { background-position: -112px -32px; } .ui-icon-arrow-2-n-s { background-position: -128px -32px; } .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } .ui-icon-arrow-2-e-w { background-position: -160px -32px; } .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } .ui-icon-arrowstop-1-n { background-position: -192px -32px; } .ui-icon-arrowstop-1-e { background-position: -208px -32px; } .ui-icon-arrowstop-1-s { background-position: -224px -32px; } .ui-icon-arrowstop-1-w { background-position: -240px -32px; } .ui-icon-arrowthick-1-n { background-position: 0 -48px; } .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } .ui-icon-arrowthick-1-e { background-position: -32px -48px; } .ui-icon-arrowthick-1-se { background-position: -48px -48px; } .ui-icon-arrowthick-1-s { background-position: -64px -48px; } .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } .ui-icon-arrowthick-1-w { background-position: -96px -48px; } .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } .ui-icon-arrow-4 { background-position: 0 -80px; } .ui-icon-arrow-4-diag { background-position: -16px -80px; } .ui-icon-extlink { background-position: -32px -80px; } .ui-icon-newwin { background-position: -48px -80px; } .ui-icon-refresh { background-position: -64px -80px; } .ui-icon-shuffle { background-position: -80px -80px; } .ui-icon-transfer-e-w { background-position: -96px -80px; } .ui-icon-transferthick-e-w { background-position: -112px -80px; } .ui-icon-folder-collapsed { background-position: 0 -96px; } .ui-icon-folder-open { background-position: -16px -96px; } .ui-icon-document { background-position: -32px -96px; } .ui-icon-document-b { background-position: -48px -96px; } .ui-icon-note { background-position: -64px -96px; } .ui-icon-mail-closed { background-position: -80px -96px; } .ui-icon-mail-open { background-position: -96px -96px; } .ui-icon-suitcase { background-position: -112px -96px; } .ui-icon-comment { background-position: -128px -96px; } .ui-icon-person { background-position: -144px -96px; } .ui-icon-print { background-position: -160px -96px; } .ui-icon-trash { background-position: -176px -96px; } .ui-icon-locked { background-position: -192px -96px; } .ui-icon-unlocked { background-position: -208px -96px; } .ui-icon-bookmark { background-position: -224px -96px; } .ui-icon-tag { background-position: -240px -96px; } .ui-icon-home { background-position: 0 -112px; } .ui-icon-flag { background-position: -16px -112px; } .ui-icon-calendar { background-position: -32px -112px; } .ui-icon-cart { background-position: -48px -112px; } .ui-icon-pencil { background-position: -64px -112px; } .ui-icon-clock { background-position: -80px -112px; } .ui-icon-disk { background-position: -96px -112px; } .ui-icon-calculator { background-position: -112px -112px; } .ui-icon-zoomin { background-position: -128px -112px; } .ui-icon-zoomout { background-position: -144px -112px; } .ui-icon-search { background-position: -160px -112px; } .ui-icon-wrench { background-position: -176px -112px; } .ui-icon-gear { background-position: -192px -112px; } .ui-icon-heart { background-position: -208px -112px; } .ui-icon-star { background-position: -224px -112px; } .ui-icon-link { background-position: -240px -112px; } .ui-icon-cancel { background-position: 0 -128px; } .ui-icon-plus { background-position: -16px -128px; } .ui-icon-plusthick { background-position: -32px -128px; } .ui-icon-minus { background-position: -48px -128px; } .ui-icon-minusthick { background-position: -64px -128px; } .ui-icon-close { background-position: -80px -128px; } .ui-icon-closethick { background-position: -96px -128px; } .ui-icon-key { background-position: -112px -128px; } .ui-icon-lightbulb { background-position: -128px -128px; } .ui-icon-scissors { background-position: -144px -128px; } .ui-icon-clipboard { background-position: -160px -128px; } .ui-icon-copy { background-position: -176px -128px; } .ui-icon-contact { background-position: -192px -128px; } .ui-icon-image { background-position: -208px -128px; } .ui-icon-video { background-position: -224px -128px; } .ui-icon-script { background-position: -240px -128px; } .ui-icon-alert { background-position: 0 -144px; } .ui-icon-info { background-position: -16px -144px; } .ui-icon-notice { background-position: -32px -144px; } .ui-icon-help { background-position: -48px -144px; } .ui-icon-check { background-position: -64px -144px; } .ui-icon-bullet { background-position: -80px -144px; } .ui-icon-radio-off { background-position: -96px -144px; } .ui-icon-radio-on { background-position: -112px -144px; } .ui-icon-pin-w { background-position: -128px -144px; } .ui-icon-pin-s { background-position: -144px -144px; } .ui-icon-play { background-position: 0 -160px; } .ui-icon-pause { background-position: -16px -160px; } .ui-icon-seek-next { background-position: -32px -160px; } .ui-icon-seek-prev { background-position: -48px -160px; } .ui-icon-seek-end { background-position: -64px -160px; } .ui-icon-seek-first { background-position: -80px -160px; } .ui-icon-stop { background-position: -96px -160px; } .ui-icon-eject { background-position: -112px -160px; } .ui-icon-volume-off { background-position: -128px -160px; } .ui-icon-volume-on { background-position: -144px -160px; } .ui-icon-power { background-position: 0 -176px; } .ui-icon-signal-diag { background-position: -16px -176px; } .ui-icon-signal { background-position: -32px -176px; } .ui-icon-battery-0 { background-position: -48px -176px; } .ui-icon-battery-1 { background-position: -64px -176px; } .ui-icon-battery-2 { background-position: -80px -176px; } .ui-icon-battery-3 { background-position: -96px -176px; } .ui-icon-circle-plus { background-position: 0 -192px; } .ui-icon-circle-minus { background-position: -16px -192px; } .ui-icon-circle-close { background-position: -32px -192px; } .ui-icon-circle-triangle-e { background-position: -48px -192px; } .ui-icon-circle-triangle-s { background-position: -64px -192px; } .ui-icon-circle-triangle-w { background-position: -80px -192px; } .ui-icon-circle-triangle-n { background-position: -96px -192px; } .ui-icon-circle-arrow-e { background-position: -112px -192px; } .ui-icon-circle-arrow-s { background-position: -128px -192px; } .ui-icon-circle-arrow-w { background-position: -144px -192px; } .ui-icon-circle-arrow-n { background-position: -160px -192px; } .ui-icon-circle-zoomin { background-position: -176px -192px; } .ui-icon-circle-zoomout { background-position: -192px -192px; } .ui-icon-circle-check { background-position: -208px -192px; } .ui-icon-circlesmall-plus { background-position: 0 -208px; } .ui-icon-circlesmall-minus { background-position: -16px -208px; } .ui-icon-circlesmall-close { background-position: -32px -208px; } .ui-icon-squaresmall-plus { background-position: -48px -208px; } .ui-icon-squaresmall-minus { background-position: -64px -208px; } .ui-icon-squaresmall-close { background-position: -80px -208px; } .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } .ui-icon-grip-solid-vertical { background-position: -32px -224px; } .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } .ui-icon-grip-diagonal-se { background-position: -80px -224px; } /* Misc visuals ----------------------------------*/ /* Corner radius */ .ui-corner-tl { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; } .ui-corner-tr { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; } .ui-corner-bl { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; } .ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; } .ui-corner-top { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; } .ui-corner-bottom { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; } .ui-corner-right { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; } .ui-corner-left { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; } .ui-corner-all { -moz-border-radius: 4px/*{cornerRadius}*/; -webkit-border-radius: 4px/*{cornerRadius}*/; } /* Overlays */ .ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; } .ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; } ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline Content-Type: image/png Content-Location: http://bop.diba.es/js/datepicker/development-bundle/themes/base/images/ui-bg_flat_75_ffffff_40x100.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAACgAAABkCAYAAAD0ZHJ6AAAAeUlEQVRoge3OMQHA IBAAsVL/nh8JDDfAkCjImpn5HvbfDpwIVoKVYCVYCVaClWAlWAlWgpVgJVgJVoKV YCVYCVaClWAlWAlWgpVgJVgJVoKVYCVYCVaClWAlWAlWgpVgJVgJVoKVYCVYCVaC lWAlWAlWgpVgJVgJVhtqiwTEKTLXTgAAAABJRU5ErkJggg== ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline; filename=ui.all.css Content-Type: text/css; charset=iso-8859-1; name=ui.all.css Content-Location: http://bop.diba.es/js/datepicker/development-bundle/themes/base/ui.all.css Content-Transfer-Encoding: 8bit @import "ui.base.css"; @import "ui.theme.css"; ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline; filename=ui.core.js Content-Type: application/x-javascript; charset=iso-8859-1; name=ui.core.js Content-Location: http://bop.diba.es/js/datepicker/development-bundle/ui/ui.core.js Content-Transfer-Encoding: Base64 LyoKICogalF1ZXJ5IFVJIDEuNy4yCiAqCiAqIENvcHlyaWdodCAoYykgMjAwOSBB VVRIT1JTLnR4dCAoaHR0cDovL2pxdWVyeXVpLmNvbS9hYm91dCkKICogRHVhbCBs aWNlbnNlZCB1bmRlciB0aGUgTUlUIChNSVQtTElDRU5TRS50eHQpCiAqIGFuZCBH UEwgKEdQTC1MSUNFTlNFLnR4dCkgbGljZW5zZXMuCiAqCiAqIGh0dHA6Ly9kb2Nz LmpxdWVyeS5jb20vVUkKICovCjtqUXVlcnkudWkgfHwgKGZ1bmN0aW9uKCQpIHsK CnZhciBfcmVtb3ZlID0gJC5mbi5yZW1vdmUsCglpc0ZGMiA9ICQuYnJvd3Nlci5t b3ppbGxhICYmIChwYXJzZUZsb2F0KCQuYnJvd3Nlci52ZXJzaW9uKSA8IDEuOSk7 CgovL0hlbHBlciBmdW5jdGlvbnMgYW5kIHVpIG9iamVjdAokLnVpID0gewoJdmVy c2lvbjogIjEuNy4yIiwKCgkvLyAkLnVpLnBsdWdpbiBpcyBkZXByZWNhdGVkLiAg VXNlIHRoZSBwcm94eSBwYXR0ZXJuIGluc3RlYWQuCglwbHVnaW46IHsKCQlhZGQ6 IGZ1bmN0aW9uKG1vZHVsZSwgb3B0aW9uLCBzZXQpIHsKCQkJdmFyIHByb3RvID0g JC51aVttb2R1bGVdLnByb3RvdHlwZTsKCQkJZm9yKHZhciBpIGluIHNldCkgewoJ CQkJcHJvdG8ucGx1Z2luc1tpXSA9IHByb3RvLnBsdWdpbnNbaV0gfHwgW107CgkJ CQlwcm90by5wbHVnaW5zW2ldLnB1c2goW29wdGlvbiwgc2V0W2ldXSk7CgkJCX0K CQl9LAoJCWNhbGw6IGZ1bmN0aW9uKGluc3RhbmNlLCBuYW1lLCBhcmdzKSB7CgkJ CXZhciBzZXQgPSBpbnN0YW5jZS5wbHVnaW5zW25hbWVdOwoJCQlpZighc2V0IHx8 ICFpbnN0YW5jZS5lbGVtZW50WzBdLnBhcmVudE5vZGUpIHsgcmV0dXJuOyB9CgoJ CQlmb3IgKHZhciBpID0gMDsgaSA8IHNldC5sZW5ndGg7IGkrKykgewoJCQkJaWYg KGluc3RhbmNlLm9wdGlvbnNbc2V0W2ldWzBdXSkgewoJCQkJCXNldFtpXVsxXS5h cHBseShpbnN0YW5jZS5lbGVtZW50LCBhcmdzKTsKCQkJCX0KCQkJfQoJCX0KCX0s CgoJY29udGFpbnM6IGZ1bmN0aW9uKGEsIGIpIHsKCQlyZXR1cm4gZG9jdW1lbnQu Y29tcGFyZURvY3VtZW50UG9zaXRpb24KCQkJPyBhLmNvbXBhcmVEb2N1bWVudFBv c2l0aW9uKGIpICYgMTYKCQkJOiBhICE9PSBiICYmIGEuY29udGFpbnMoYik7Cgl9 LAoKCWhhc1Njcm9sbDogZnVuY3Rpb24oZWwsIGEpIHsKCgkJLy9JZiBvdmVyZmxv dyBpcyBoaWRkZW4sIHRoZSBlbGVtZW50IG1pZ2h0IGhhdmUgZXh0cmEgY29udGVu dCwgYnV0IHRoZSB1c2VyIHdhbnRzIHRvIGhpZGUgaXQKCQlpZiAoJChlbCkuY3Nz KCdvdmVyZmxvdycpID09ICdoaWRkZW4nKSB7IHJldHVybiBmYWxzZTsgfQoKCQl2 YXIgc2Nyb2xsID0gKGEgJiYgYSA9PSAnbGVmdCcpID8gJ3Njcm9sbExlZnQnIDog J3Njcm9sbFRvcCcsCgkJCWhhcyA9IGZhbHNlOwoKCQlpZiAoZWxbc2Nyb2xsXSA+ IDApIHsgcmV0dXJuIHRydWU7IH0KCgkJLy8gVE9ETzogZGV0ZXJtaW5lIHdoaWNo IGNhc2VzIGFjdHVhbGx5IGNhdXNlIHRoaXMgdG8gaGFwcGVuCgkJLy8gaWYgdGhl IGVsZW1lbnQgZG9lc24ndCBoYXZlIHRoZSBzY3JvbGwgc2V0LCBzZWUgaWYgaXQn cyBwb3NzaWJsZSB0bwoJCS8vIHNldCB0aGUgc2Nyb2xsCgkJZWxbc2Nyb2xsXSA9 IDE7CgkJaGFzID0gKGVsW3Njcm9sbF0gPiAwKTsKCQllbFtzY3JvbGxdID0gMDsK CQlyZXR1cm4gaGFzOwoJfSwKCglpc092ZXJBeGlzOiBmdW5jdGlvbih4LCByZWZl cmVuY2UsIHNpemUpIHsKCQkvL0RldGVybWluZXMgd2hlbiB4IGNvb3JkaW5hdGUg aXMgb3ZlciAiYiIgZWxlbWVudCBheGlzCgkJcmV0dXJuICh4ID4gcmVmZXJlbmNl KSAmJiAoeCA8IChyZWZlcmVuY2UgKyBzaXplKSk7Cgl9LAoKCWlzT3ZlcjogZnVu Y3Rpb24oeSwgeCwgdG9wLCBsZWZ0LCBoZWlnaHQsIHdpZHRoKSB7CgkJLy9EZXRl cm1pbmVzIHdoZW4geCwgeSBjb29yZGluYXRlcyBpcyBvdmVyICJiIiBlbGVtZW50 CgkJcmV0dXJuICQudWkuaXNPdmVyQXhpcyh5LCB0b3AsIGhlaWdodCkgJiYgJC51 aS5pc092ZXJBeGlzKHgsIGxlZnQsIHdpZHRoKTsKCX0sCgoJa2V5Q29kZTogewoJ CUJBQ0tTUEFDRTogOCwKCQlDQVBTX0xPQ0s6IDIwLAoJCUNPTU1BOiAxODgsCgkJ Q09OVFJPTDogMTcsCgkJREVMRVRFOiA0NiwKCQlET1dOOiA0MCwKCQlFTkQ6IDM1 LAoJCUVOVEVSOiAxMywKCQlFU0NBUEU6IDI3LAoJCUhPTUU6IDM2LAoJCUlOU0VS VDogNDUsCgkJTEVGVDogMzcsCgkJTlVNUEFEX0FERDogMTA3LAoJCU5VTVBBRF9E RUNJTUFMOiAxMTAsCgkJTlVNUEFEX0RJVklERTogMTExLAoJCU5VTVBBRF9FTlRF UjogMTA4LAoJCU5VTVBBRF9NVUxUSVBMWTogMTA2LAoJCU5VTVBBRF9TVUJUUkFD VDogMTA5LAoJCVBBR0VfRE9XTjogMzQsCgkJUEFHRV9VUDogMzMsCgkJUEVSSU9E OiAxOTAsCgkJUklHSFQ6IDM5LAoJCVNISUZUOiAxNiwKCQlTUEFDRTogMzIsCgkJ VEFCOiA5LAoJCVVQOiAzOAoJfQp9OwoKLy8gV0FJLUFSSUEgbm9ybWFsaXphdGlv bgppZiAoaXNGRjIpIHsKCXZhciBhdHRyID0gJC5hdHRyLAoJCXJlbW92ZUF0dHIg PSAkLmZuLnJlbW92ZUF0dHIsCgkJYXJpYU5TID0gImh0dHA6Ly93d3cudzMub3Jn LzIwMDUvMDcvYWFhIiwKCQlhcmlhU3RhdGUgPSAvXmFyaWEtLywKCQlhcmlhUm9s ZSA9IC9ed2Fpcm9sZTovOwoKCSQuYXR0ciA9IGZ1bmN0aW9uKGVsZW0sIG5hbWUs IHZhbHVlKSB7CgkJdmFyIHNldCA9IHZhbHVlICE9PSB1bmRlZmluZWQ7CgoJCXJl dHVybiAobmFtZSA9PSAncm9sZScKCQkJPyAoc2V0CgkJCQk/IGF0dHIuY2FsbCh0 aGlzLCBlbGVtLCBuYW1lLCAid2Fpcm9sZToiICsgdmFsdWUpCgkJCQk6IChhdHRy LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgIiIpLnJlcGxhY2UoYXJpYVJvbGUs ICIiKSkKCQkJOiAoYXJpYVN0YXRlLnRlc3QobmFtZSkKCQkJCT8gKHNldAoJCQkJ CT8gZWxlbS5zZXRBdHRyaWJ1dGVOUyhhcmlhTlMsCgkJCQkJCW5hbWUucmVwbGFj ZShhcmlhU3RhdGUsICJhYWE6IiksIHZhbHVlKQoJCQkJCTogYXR0ci5jYWxsKHRo aXMsIGVsZW0sIG5hbWUucmVwbGFjZShhcmlhU3RhdGUsICJhYWE6IikpKQoJCQkJ OiBhdHRyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpKTsKCX07CgoJJC5mbi5yZW1v dmVBdHRyID0gZnVuY3Rpb24obmFtZSkgewoJCXJldHVybiAoYXJpYVN0YXRlLnRl c3QobmFtZSkKCQkJPyB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJCQl0aGlzLnJl bW92ZUF0dHJpYnV0ZU5TKGFyaWFOUywgbmFtZS5yZXBsYWNlKGFyaWFTdGF0ZSwg IiIpKTsKCQkJfSkgOiByZW1vdmVBdHRyLmNhbGwodGhpcywgbmFtZSkpOwoJfTsK fQoKLy9qUXVlcnkgcGx1Z2lucwokLmZuLmV4dGVuZCh7CglyZW1vdmU6IGZ1bmN0 aW9uKCkgewoJCS8vIFNhZmFyaSBoYXMgYSBuYXRpdmUgcmVtb3ZlIGV2ZW50IHdo aWNoIGFjdHVhbGx5IHJlbW92ZXMgRE9NIGVsZW1lbnRzLAoJCS8vIHNvIHdlIGhh dmUgdG8gdXNlIHRyaWdnZXJIYW5kbGVyIGluc3RlYWQgb2YgdHJpZ2dlciAoIzMw MzcpLgoJCSQoIioiLCB0aGlzKS5hZGQodGhpcykuZWFjaChmdW5jdGlvbigpIHsK CQkJJCh0aGlzKS50cmlnZ2VySGFuZGxlcigicmVtb3ZlIik7CgkJfSk7CgkJcmV0 dXJuIF9yZW1vdmUuYXBwbHkodGhpcywgYXJndW1lbnRzICk7Cgl9LAoKCWVuYWJs ZVNlbGVjdGlvbjogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIHRoaXMKCQkJLmF0dHIo J3Vuc2VsZWN0YWJsZScsICdvZmYnKQoJCQkuY3NzKCdNb3pVc2VyU2VsZWN0Jywg JycpCgkJCS51bmJpbmQoJ3NlbGVjdHN0YXJ0LnVpJyk7Cgl9LAoKCWRpc2FibGVT ZWxlY3Rpb246IGZ1bmN0aW9uKCkgewoJCXJldHVybiB0aGlzCgkJCS5hdHRyKCd1 bnNlbGVjdGFibGUnLCAnb24nKQoJCQkuY3NzKCdNb3pVc2VyU2VsZWN0JywgJ25v bmUnKQoJCQkuYmluZCgnc2VsZWN0c3RhcnQudWknLCBmdW5jdGlvbigpIHsgcmV0 dXJuIGZhbHNlOyB9KTsKCX0sCgoJc2Nyb2xsUGFyZW50OiBmdW5jdGlvbigpIHsK CQl2YXIgc2Nyb2xsUGFyZW50OwoJCWlmKCgkLmJyb3dzZXIubXNpZSAmJiAoLyhz dGF0aWN8cmVsYXRpdmUpLykudGVzdCh0aGlzLmNzcygncG9zaXRpb24nKSkpIHx8 ICgvYWJzb2x1dGUvKS50ZXN0KHRoaXMuY3NzKCdwb3NpdGlvbicpKSkgewoJCQlz Y3JvbGxQYXJlbnQgPSB0aGlzLnBhcmVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKSB7 CgkJCQlyZXR1cm4gKC8ocmVsYXRpdmV8YWJzb2x1dGV8Zml4ZWQpLykudGVzdCgk LmN1ckNTUyh0aGlzLCdwb3NpdGlvbicsMSkpICYmICgvKGF1dG98c2Nyb2xsKS8p LnRlc3QoJC5jdXJDU1ModGhpcywnb3ZlcmZsb3cnLDEpKyQuY3VyQ1NTKHRoaXMs J292ZXJmbG93LXknLDEpKyQuY3VyQ1NTKHRoaXMsJ292ZXJmbG93LXgnLDEpKTsK CQkJfSkuZXEoMCk7CgkJfSBlbHNlIHsKCQkJc2Nyb2xsUGFyZW50ID0gdGhpcy5w YXJlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKCkgewoJCQkJcmV0dXJuICgvKGF1dG98 c2Nyb2xsKS8pLnRlc3QoJC5jdXJDU1ModGhpcywnb3ZlcmZsb3cnLDEpKyQuY3Vy Q1NTKHRoaXMsJ292ZXJmbG93LXknLDEpKyQuY3VyQ1NTKHRoaXMsJ292ZXJmbG93 LXgnLDEpKTsKCQkJfSkuZXEoMCk7CgkJfQoKCQlyZXR1cm4gKC9maXhlZC8pLnRl c3QodGhpcy5jc3MoJ3Bvc2l0aW9uJykpIHx8ICFzY3JvbGxQYXJlbnQubGVuZ3Ro ID8gJChkb2N1bWVudCkgOiBzY3JvbGxQYXJlbnQ7Cgl9Cn0pOwoKCi8vQWRkaXRp b25hbCBzZWxlY3RvcnMKJC5leHRlbmQoJC5leHByWyc6J10sIHsKCWRhdGE6IGZ1 bmN0aW9uKGVsZW0sIGksIG1hdGNoKSB7CgkJcmV0dXJuICEhJC5kYXRhKGVsZW0s IG1hdGNoWzNdKTsKCX0sCgoJZm9jdXNhYmxlOiBmdW5jdGlvbihlbGVtZW50KSB7 CgkJdmFyIG5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgp LAoJCQl0YWJJbmRleCA9ICQuYXR0cihlbGVtZW50LCAndGFiaW5kZXgnKTsKCQly ZXR1cm4gKC9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdC8udGVz dChub2RlTmFtZSkKCQkJPyAhZWxlbWVudC5kaXNhYmxlZAoJCQk6ICdhJyA9PSBu b2RlTmFtZSB8fCAnYXJlYScgPT0gbm9kZU5hbWUKCQkJCT8gZWxlbWVudC5ocmVm IHx8ICFpc05hTih0YWJJbmRleCkKCQkJCTogIWlzTmFOKHRhYkluZGV4KSkKCQkJ Ly8gdGhlIGVsZW1lbnQgYW5kIGFsbCBvZiBpdHMgYW5jZXN0b3JzIG11c3QgYmUg dmlzaWJsZQoJCQkvLyB0aGUgYnJvd3NlciBtYXkgcmVwb3J0IHRoYXQgdGhlIGFy ZWEgaXMgaGlkZGVuCgkJCSYmICEkKGVsZW1lbnQpWydhcmVhJyA9PSBub2RlTmFt ZSA/ICdwYXJlbnRzJyA6ICdjbG9zZXN0J10oJzpoaWRkZW4nKS5sZW5ndGg7Cgl9 LAoKCXRhYmJhYmxlOiBmdW5jdGlvbihlbGVtZW50KSB7CgkJdmFyIHRhYkluZGV4 ID0gJC5hdHRyKGVsZW1lbnQsICd0YWJpbmRleCcpOwoJCXJldHVybiAoaXNOYU4o dGFiSW5kZXgpIHx8IHRhYkluZGV4ID49IDApICYmICQoZWxlbWVudCkuaXMoJzpm b2N1c2FibGUnKTsKCX0KfSk7CgoKLy8gJC53aWRnZXQgaXMgYSBmYWN0b3J5IHRv IGNyZWF0ZSBqUXVlcnkgcGx1Z2lucwovLyB0YWtpbmcgc29tZSBib2lsZXJwbGF0 ZSBjb2RlIG91dCBvZiB0aGUgcGx1Z2luIGNvZGUKZnVuY3Rpb24gZ2V0dGVyKG5h bWVzcGFjZSwgcGx1Z2luLCBtZXRob2QsIGFyZ3MpIHsKCWZ1bmN0aW9uIGdldE1l dGhvZHModHlwZSkgewoJCXZhciBtZXRob2RzID0gJFtuYW1lc3BhY2VdW3BsdWdp bl1bdHlwZV0gfHwgW107CgkJcmV0dXJuICh0eXBlb2YgbWV0aG9kcyA9PSAnc3Ry aW5nJyA/IG1ldGhvZHMuc3BsaXQoLyw/XHMrLykgOiBtZXRob2RzKTsKCX0KCgl2 YXIgbWV0aG9kcyA9IGdldE1ldGhvZHMoJ2dldHRlcicpOwoJaWYgKGFyZ3MubGVu Z3RoID09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT0gJ3N0cmluZycpIHsKCQltZXRo b2RzID0gbWV0aG9kcy5jb25jYXQoZ2V0TWV0aG9kcygnZ2V0dGVyU2V0dGVyJykp OwoJfQoJcmV0dXJuICgkLmluQXJyYXkobWV0aG9kLCBtZXRob2RzKSAhPSAtMSk7 Cn0KCiQud2lkZ2V0ID0gZnVuY3Rpb24obmFtZSwgcHJvdG90eXBlKSB7Cgl2YXIg bmFtZXNwYWNlID0gbmFtZS5zcGxpdCgiLiIpWzBdOwoJbmFtZSA9IG5hbWUuc3Bs aXQoIi4iKVsxXTsKCgkvLyBjcmVhdGUgcGx1Z2luIG1ldGhvZAoJJC5mbltuYW1l XSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKCQl2YXIgaXNNZXRob2RDYWxsID0gKHR5 cGVvZiBvcHRpb25zID09ICdzdHJpbmcnKSwKCQkJYXJncyA9IEFycmF5LnByb3Rv dHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7CgoJCS8vIHByZXZlbnQgY2Fs bHMgdG8gaW50ZXJuYWwgbWV0aG9kcwoJCWlmIChpc01ldGhvZENhbGwgJiYgb3B0 aW9ucy5zdWJzdHJpbmcoMCwgMSkgPT0gJ18nKSB7CgkJCXJldHVybiB0aGlzOwoJ CX0KCgkJLy8gaGFuZGxlIGdldHRlciBtZXRob2RzCgkJaWYgKGlzTWV0aG9kQ2Fs bCAmJiBnZXR0ZXIobmFtZXNwYWNlLCBuYW1lLCBvcHRpb25zLCBhcmdzKSkgewoJ CQl2YXIgaW5zdGFuY2UgPSAkLmRhdGEodGhpc1swXSwgbmFtZSk7CgkJCXJldHVy biAoaW5zdGFuY2UgPyBpbnN0YW5jZVtvcHRpb25zXS5hcHBseShpbnN0YW5jZSwg YXJncykKCQkJCTogdW5kZWZpbmVkKTsKCQl9CgoJCS8vIGhhbmRsZSBpbml0aWFs aXphdGlvbiBhbmQgbm9uLWdldHRlciBtZXRob2RzCgkJcmV0dXJuIHRoaXMuZWFj aChmdW5jdGlvbigpIHsKCQkJdmFyIGluc3RhbmNlID0gJC5kYXRhKHRoaXMsIG5h bWUpOwoKCQkJLy8gY29uc3RydWN0b3IKCQkJKCFpbnN0YW5jZSAmJiAhaXNNZXRo b2RDYWxsICYmCgkJCQkkLmRhdGEodGhpcywgbmFtZSwgbmV3ICRbbmFtZXNwYWNl XVtuYW1lXSh0aGlzLCBvcHRpb25zKSkuX2luaXQoKSk7CgoJCQkvLyBtZXRob2Qg Y2FsbAoJCQkoaW5zdGFuY2UgJiYgaXNNZXRob2RDYWxsICYmICQuaXNGdW5jdGlv bihpbnN0YW5jZVtvcHRpb25zXSkgJiYKCQkJCWluc3RhbmNlW29wdGlvbnNdLmFw cGx5KGluc3RhbmNlLCBhcmdzKSk7CgkJfSk7Cgl9OwoKCS8vIGNyZWF0ZSB3aWRn ZXQgY29uc3RydWN0b3IKCSRbbmFtZXNwYWNlXSA9ICRbbmFtZXNwYWNlXSB8fCB7 fTsKCSRbbmFtZXNwYWNlXVtuYW1lXSA9IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlv bnMpIHsKCQl2YXIgc2VsZiA9IHRoaXM7CgoJCXRoaXMubmFtZXNwYWNlID0gbmFt ZXNwYWNlOwoJCXRoaXMud2lkZ2V0TmFtZSA9IG5hbWU7CgkJdGhpcy53aWRnZXRF dmVudFByZWZpeCA9ICRbbmFtZXNwYWNlXVtuYW1lXS5ldmVudFByZWZpeCB8fCBu YW1lOwoJCXRoaXMud2lkZ2V0QmFzZUNsYXNzID0gbmFtZXNwYWNlICsgJy0nICsg bmFtZTsKCgkJdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sCgkJCSQud2lkZ2V0 LmRlZmF1bHRzLAoJCQkkW25hbWVzcGFjZV1bbmFtZV0uZGVmYXVsdHMsCgkJCSQu bWV0YWRhdGEgJiYgJC5tZXRhZGF0YS5nZXQoZWxlbWVudClbbmFtZV0sCgkJCW9w dGlvbnMpOwoKCQl0aGlzLmVsZW1lbnQgPSAkKGVsZW1lbnQpCgkJCS5iaW5kKCdz ZXREYXRhLicgKyBuYW1lLCBmdW5jdGlvbihldmVudCwga2V5LCB2YWx1ZSkgewoJ CQkJaWYgKGV2ZW50LnRhcmdldCA9PSBlbGVtZW50KSB7CgkJCQkJcmV0dXJuIHNl bGYuX3NldERhdGEoa2V5LCB2YWx1ZSk7CgkJCQl9CgkJCX0pCgkJCS5iaW5kKCdn ZXREYXRhLicgKyBuYW1lLCBmdW5jdGlvbihldmVudCwga2V5KSB7CgkJCQlpZiAo ZXZlbnQudGFyZ2V0ID09IGVsZW1lbnQpIHsKCQkJCQlyZXR1cm4gc2VsZi5fZ2V0 RGF0YShrZXkpOwoJCQkJfQoJCQl9KQoJCQkuYmluZCgncmVtb3ZlJywgZnVuY3Rp b24oKSB7CgkJCQlyZXR1cm4gc2VsZi5kZXN0cm95KCk7CgkJCX0pOwoJfTsKCgkv LyBhZGQgd2lkZ2V0IHByb3RvdHlwZQoJJFtuYW1lc3BhY2VdW25hbWVdLnByb3Rv dHlwZSA9ICQuZXh0ZW5kKHt9LCAkLndpZGdldC5wcm90b3R5cGUsIHByb3RvdHlw ZSk7CgoJLy8gVE9ETzogbWVyZ2UgZ2V0dGVyIGFuZCBnZXR0ZXJTZXR0ZXIgcHJv cGVydGllcyBmcm9tIHdpZGdldCBwcm90b3R5cGUKCS8vIGFuZCBwbHVnaW4gcHJv dG90eXBlCgkkW25hbWVzcGFjZV1bbmFtZV0uZ2V0dGVyU2V0dGVyID0gJ29wdGlv bic7Cn07CgokLndpZGdldC5wcm90b3R5cGUgPSB7CglfaW5pdDogZnVuY3Rpb24o KSB7fSwKCWRlc3Ryb3k6IGZ1bmN0aW9uKCkgewoJCXRoaXMuZWxlbWVudC5yZW1v dmVEYXRhKHRoaXMud2lkZ2V0TmFtZSkKCQkJLnJlbW92ZUNsYXNzKHRoaXMud2lk Z2V0QmFzZUNsYXNzICsgJy1kaXNhYmxlZCcgKyAnICcgKyB0aGlzLm5hbWVzcGFj ZSArICctc3RhdGUtZGlzYWJsZWQnKQoJCQkucmVtb3ZlQXR0cignYXJpYS1kaXNh YmxlZCcpOwoJfSwKCglvcHRpb246IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKCQl2 YXIgb3B0aW9ucyA9IGtleSwKCQkJc2VsZiA9IHRoaXM7CgoJCWlmICh0eXBlb2Yg a2V5ID09ICJzdHJpbmciKSB7CgkJCWlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7 CgkJCQlyZXR1cm4gdGhpcy5fZ2V0RGF0YShrZXkpOwoJCQl9CgkJCW9wdGlvbnMg PSB7fTsKCQkJb3B0aW9uc1trZXldID0gdmFsdWU7CgkJfQoKCQkkLmVhY2gob3B0 aW9ucywgZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewoJCQlzZWxmLl9zZXREYXRhKGtl eSwgdmFsdWUpOwoJCX0pOwoJfSwKCV9nZXREYXRhOiBmdW5jdGlvbihrZXkpIHsK CQlyZXR1cm4gdGhpcy5vcHRpb25zW2tleV07Cgl9LAoJX3NldERhdGE6IGZ1bmN0 aW9uKGtleSwgdmFsdWUpIHsKCQl0aGlzLm9wdGlvbnNba2V5XSA9IHZhbHVlOwoK CQlpZiAoa2V5ID09ICdkaXNhYmxlZCcpIHsKCQkJdGhpcy5lbGVtZW50CgkJCQlb dmFsdWUgPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJ10oCgkJCQkJdGhpcy53 aWRnZXRCYXNlQ2xhc3MgKyAnLWRpc2FibGVkJyArICcgJyArCgkJCQkJdGhpcy5u YW1lc3BhY2UgKyAnLXN0YXRlLWRpc2FibGVkJykKCQkJCS5hdHRyKCJhcmlhLWRp c2FibGVkIiwgdmFsdWUpOwoJCX0KCX0sCgoJZW5hYmxlOiBmdW5jdGlvbigpIHsK CQl0aGlzLl9zZXREYXRhKCdkaXNhYmxlZCcsIGZhbHNlKTsKCX0sCglkaXNhYmxl OiBmdW5jdGlvbigpIHsKCQl0aGlzLl9zZXREYXRhKCdkaXNhYmxlZCcsIHRydWUp OwoJfSwKCglfdHJpZ2dlcjogZnVuY3Rpb24odHlwZSwgZXZlbnQsIGRhdGEpIHsK CQl2YXIgY2FsbGJhY2sgPSB0aGlzLm9wdGlvbnNbdHlwZV0sCgkJCWV2ZW50TmFt ZSA9ICh0eXBlID09IHRoaXMud2lkZ2V0RXZlbnRQcmVmaXgKCQkJCT8gdHlwZSA6 IHRoaXMud2lkZ2V0RXZlbnRQcmVmaXggKyB0eXBlKTsKCgkJZXZlbnQgPSAkLkV2 ZW50KGV2ZW50KTsKCQlldmVudC50eXBlID0gZXZlbnROYW1lOwoKCQkvLyBjb3B5 IG9yaWdpbmFsIGV2ZW50IHByb3BlcnRpZXMgb3ZlciB0byB0aGUgbmV3IGV2ZW50 CgkJLy8gdGhpcyB3b3VsZCBoYXBwZW4gaWYgd2UgY291bGQgY2FsbCAkLmV2ZW50 LmZpeCBpbnN0ZWFkIG9mICQuRXZlbnQKCQkvLyBidXQgd2UgZG9uJ3QgaGF2ZSBh IHdheSB0byBmb3JjZSBhbiBldmVudCB0byBiZSBmaXhlZCBtdWx0aXBsZSB0aW1l cwoJCWlmIChldmVudC5vcmlnaW5hbEV2ZW50KSB7CgkJCWZvciAodmFyIGkgPSAk LmV2ZW50LnByb3BzLmxlbmd0aCwgcHJvcDsgaTspIHsKCQkJCXByb3AgPSAkLmV2 ZW50LnByb3BzWy0taV07CgkJCQlldmVudFtwcm9wXSA9IGV2ZW50Lm9yaWdpbmFs RXZlbnRbcHJvcF07CgkJCX0KCQl9CgoJCXRoaXMuZWxlbWVudC50cmlnZ2VyKGV2 ZW50LCBkYXRhKTsKCgkJcmV0dXJuICEoJC5pc0Z1bmN0aW9uKGNhbGxiYWNrKSAm JiBjYWxsYmFjay5jYWxsKHRoaXMuZWxlbWVudFswXSwgZXZlbnQsIGRhdGEpID09 PSBmYWxzZQoJCQl8fCBldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSk7Cgl9Cn07 CgokLndpZGdldC5kZWZhdWx0cyA9IHsKCWRpc2FibGVkOiBmYWxzZQp9OwoKCi8q KiBNb3VzZSBJbnRlcmFjdGlvbiBQbHVnaW4gKiovCgokLnVpLm1vdXNlID0gewoJ X21vdXNlSW5pdDogZnVuY3Rpb24oKSB7CgkJdmFyIHNlbGYgPSB0aGlzOwoKCQl0 aGlzLmVsZW1lbnQKCQkJLmJpbmQoJ21vdXNlZG93bi4nK3RoaXMud2lkZ2V0TmFt ZSwgZnVuY3Rpb24oZXZlbnQpIHsKCQkJCXJldHVybiBzZWxmLl9tb3VzZURvd24o ZXZlbnQpOwoJCQl9KQoJCQkuYmluZCgnY2xpY2suJyt0aGlzLndpZGdldE5hbWUs IGZ1bmN0aW9uKGV2ZW50KSB7CgkJCQlpZihzZWxmLl9wcmV2ZW50Q2xpY2tFdmVu dCkgewoJCQkJCXNlbGYuX3ByZXZlbnRDbGlja0V2ZW50ID0gZmFsc2U7CgkJCQkJ ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CgkJCQkJcmV0dXJuIGZh bHNlOwoJCQkJfQoJCQl9KTsKCgkJLy8gUHJldmVudCB0ZXh0IHNlbGVjdGlvbiBp biBJRQoJCWlmICgkLmJyb3dzZXIubXNpZSkgewoJCQl0aGlzLl9tb3VzZVVuc2Vs ZWN0YWJsZSA9IHRoaXMuZWxlbWVudC5hdHRyKCd1bnNlbGVjdGFibGUnKTsKCQkJ dGhpcy5lbGVtZW50LmF0dHIoJ3Vuc2VsZWN0YWJsZScsICdvbicpOwoJCX0KCgkJ dGhpcy5zdGFydGVkID0gZmFsc2U7Cgl9LAoKCS8vIFRPRE86IG1ha2Ugc3VyZSBk ZXN0cm95aW5nIG9uZSBpbnN0YW5jZSBvZiBtb3VzZSBkb2Vzbid0IG1lc3Mgd2l0 aAoJLy8gb3RoZXIgaW5zdGFuY2VzIG9mIG1vdXNlCglfbW91c2VEZXN0cm95OiBm dW5jdGlvbigpIHsKCQl0aGlzLmVsZW1lbnQudW5iaW5kKCcuJyt0aGlzLndpZGdl dE5hbWUpOwoKCQkvLyBSZXN0b3JlIHRleHQgc2VsZWN0aW9uIGluIElFCgkJKCQu YnJvd3Nlci5tc2llCgkJCSYmIHRoaXMuZWxlbWVudC5hdHRyKCd1bnNlbGVjdGFi bGUnLCB0aGlzLl9tb3VzZVVuc2VsZWN0YWJsZSkpOwoJfSwKCglfbW91c2VEb3du OiBmdW5jdGlvbihldmVudCkgewoJCS8vIGRvbid0IGxldCBtb3JlIHRoYW4gb25l IHdpZGdldCBoYW5kbGUgbW91c2VTdGFydAoJCS8vIFRPRE86IGZpZ3VyZSBvdXQg d2h5IHdlIGhhdmUgdG8gdXNlIG9yaWdpbmFsRXZlbnQKCQlldmVudC5vcmlnaW5h bEV2ZW50ID0gZXZlbnQub3JpZ2luYWxFdmVudCB8fCB7fTsKCQlpZiAoZXZlbnQu b3JpZ2luYWxFdmVudC5tb3VzZUhhbmRsZWQpIHsgcmV0dXJuOyB9CgoJCS8vIHdl IG1heSBoYXZlIG1pc3NlZCBtb3VzZXVwIChvdXQgb2Ygd2luZG93KQoJCSh0aGlz Ll9tb3VzZVN0YXJ0ZWQgJiYgdGhpcy5fbW91c2VVcChldmVudCkpOwoKCQl0aGlz Ll9tb3VzZURvd25FdmVudCA9IGV2ZW50OwoKCQl2YXIgc2VsZiA9IHRoaXMsCgkJ CWJ0bklzTGVmdCA9IChldmVudC53aGljaCA9PSAxKSwKCQkJZWxJc0NhbmNlbCA9 ICh0eXBlb2YgdGhpcy5vcHRpb25zLmNhbmNlbCA9PSAic3RyaW5nIiA/ICQoZXZl bnQudGFyZ2V0KS5wYXJlbnRzKCkuYWRkKGV2ZW50LnRhcmdldCkuZmlsdGVyKHRo aXMub3B0aW9ucy5jYW5jZWwpLmxlbmd0aCA6IGZhbHNlKTsKCQlpZiAoIWJ0bklz TGVmdCB8fCBlbElzQ2FuY2VsIHx8ICF0aGlzLl9tb3VzZUNhcHR1cmUoZXZlbnQp KSB7CgkJCXJldHVybiB0cnVlOwoJCX0KCgkJdGhpcy5tb3VzZURlbGF5TWV0ID0g IXRoaXMub3B0aW9ucy5kZWxheTsKCQlpZiAoIXRoaXMubW91c2VEZWxheU1ldCkg ewoJCQl0aGlzLl9tb3VzZURlbGF5VGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9u KCkgewoJCQkJc2VsZi5tb3VzZURlbGF5TWV0ID0gdHJ1ZTsKCQkJfSwgdGhpcy5v cHRpb25zLmRlbGF5KTsKCQl9CgoJCWlmICh0aGlzLl9tb3VzZURpc3RhbmNlTWV0 KGV2ZW50KSAmJiB0aGlzLl9tb3VzZURlbGF5TWV0KGV2ZW50KSkgewoJCQl0aGlz Ll9tb3VzZVN0YXJ0ZWQgPSAodGhpcy5fbW91c2VTdGFydChldmVudCkgIT09IGZh bHNlKTsKCQkJaWYgKCF0aGlzLl9tb3VzZVN0YXJ0ZWQpIHsKCQkJCWV2ZW50LnBy ZXZlbnREZWZhdWx0KCk7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfQoJCX0KCgkJLy8g dGhlc2UgZGVsZWdhdGVzIGFyZSByZXF1aXJlZCB0byBrZWVwIGNvbnRleHQKCQl0 aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CgkJCXJl dHVybiBzZWxmLl9tb3VzZU1vdmUoZXZlbnQpOwoJCX07CgkJdGhpcy5fbW91c2VV cERlbGVnYXRlID0gZnVuY3Rpb24oZXZlbnQpIHsKCQkJcmV0dXJuIHNlbGYuX21v dXNlVXAoZXZlbnQpOwoJCX07CgkJJChkb2N1bWVudCkKCQkJLmJpbmQoJ21vdXNl bW92ZS4nK3RoaXMud2lkZ2V0TmFtZSwgdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUp CgkJCS5iaW5kKCdtb3VzZXVwLicrdGhpcy53aWRnZXROYW1lLCB0aGlzLl9tb3Vz ZVVwRGVsZWdhdGUpOwoKCQkvLyBwcmV2ZW50RGVmYXVsdCgpIGlzIHVzZWQgdG8g cHJldmVudCB0aGUgc2VsZWN0aW9uIG9mIHRleHQgaGVyZSAtCgkJLy8gaG93ZXZl ciwgaW4gU2FmYXJpLCB0aGlzIGNhdXNlcyBzZWxlY3QgYm94ZXMgbm90IHRvIGJl IHNlbGVjdGFibGUKCQkvLyBhbnltb3JlLCBzbyB0aGlzIGZpeCBpcyBuZWVkZWQK CQkoJC5icm93c2VyLnNhZmFyaSB8fCBldmVudC5wcmV2ZW50RGVmYXVsdCgpKTsK CgkJZXZlbnQub3JpZ2luYWxFdmVudC5tb3VzZUhhbmRsZWQgPSB0cnVlOwoJCXJl dHVybiB0cnVlOwoJfSwKCglfbW91c2VNb3ZlOiBmdW5jdGlvbihldmVudCkgewoJ CS8vIElFIG1vdXNldXAgY2hlY2sgLSBtb3VzZXVwIGhhcHBlbmVkIHdoZW4gbW91 c2Ugd2FzIG91dCBvZiB3aW5kb3cKCQlpZiAoJC5icm93c2VyLm1zaWUgJiYgIWV2 ZW50LmJ1dHRvbikgewoJCQlyZXR1cm4gdGhpcy5fbW91c2VVcChldmVudCk7CgkJ fQoKCQlpZiAodGhpcy5fbW91c2VTdGFydGVkKSB7CgkJCXRoaXMuX21vdXNlRHJh ZyhldmVudCk7CgkJCXJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwoJCX0K CgkJaWYgKHRoaXMuX21vdXNlRGlzdGFuY2VNZXQoZXZlbnQpICYmIHRoaXMuX21v dXNlRGVsYXlNZXQoZXZlbnQpKSB7CgkJCXRoaXMuX21vdXNlU3RhcnRlZCA9CgkJ CQkodGhpcy5fbW91c2VTdGFydCh0aGlzLl9tb3VzZURvd25FdmVudCwgZXZlbnQp ICE9PSBmYWxzZSk7CgkJCSh0aGlzLl9tb3VzZVN0YXJ0ZWQgPyB0aGlzLl9tb3Vz ZURyYWcoZXZlbnQpIDogdGhpcy5fbW91c2VVcChldmVudCkpOwoJCX0KCgkJcmV0 dXJuICF0aGlzLl9tb3VzZVN0YXJ0ZWQ7Cgl9LAoKCV9tb3VzZVVwOiBmdW5jdGlv bihldmVudCkgewoJCSQoZG9jdW1lbnQpCgkJCS51bmJpbmQoJ21vdXNlbW92ZS4n K3RoaXMud2lkZ2V0TmFtZSwgdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUpCgkJCS51 bmJpbmQoJ21vdXNldXAuJyt0aGlzLndpZGdldE5hbWUsIHRoaXMuX21vdXNlVXBE ZWxlZ2F0ZSk7CgoJCWlmICh0aGlzLl9tb3VzZVN0YXJ0ZWQpIHsKCQkJdGhpcy5f bW91c2VTdGFydGVkID0gZmFsc2U7CgkJCXRoaXMuX3ByZXZlbnRDbGlja0V2ZW50 ID0gKGV2ZW50LnRhcmdldCA9PSB0aGlzLl9tb3VzZURvd25FdmVudC50YXJnZXQp OwoJCQl0aGlzLl9tb3VzZVN0b3AoZXZlbnQpOwoJCX0KCgkJcmV0dXJuIGZhbHNl OwoJfSwKCglfbW91c2VEaXN0YW5jZU1ldDogZnVuY3Rpb24oZXZlbnQpIHsKCQly ZXR1cm4gKE1hdGgubWF4KAoJCQkJTWF0aC5hYnModGhpcy5fbW91c2VEb3duRXZl bnQucGFnZVggLSBldmVudC5wYWdlWCksCgkJCQlNYXRoLmFicyh0aGlzLl9tb3Vz ZURvd25FdmVudC5wYWdlWSAtIGV2ZW50LnBhZ2VZKQoJCQkpID49IHRoaXMub3B0 aW9ucy5kaXN0YW5jZQoJCSk7Cgl9LAoKCV9tb3VzZURlbGF5TWV0OiBmdW5jdGlv bihldmVudCkgewoJCXJldHVybiB0aGlzLm1vdXNlRGVsYXlNZXQ7Cgl9LAoKCS8v IFRoZXNlIGFyZSBwbGFjZWhvbGRlciBtZXRob2RzLCB0byBiZSBvdmVycmlkZW4g YnkgZXh0ZW5kaW5nIHBsdWdpbgoJX21vdXNlU3RhcnQ6IGZ1bmN0aW9uKGV2ZW50 KSB7fSwKCV9tb3VzZURyYWc6IGZ1bmN0aW9uKGV2ZW50KSB7fSwKCV9tb3VzZVN0 b3A6IGZ1bmN0aW9uKGV2ZW50KSB7fSwKCV9tb3VzZUNhcHR1cmU6IGZ1bmN0aW9u KGV2ZW50KSB7IHJldHVybiB0cnVlOyB9Cn07CgokLnVpLm1vdXNlLmRlZmF1bHRz ID0gewoJY2FuY2VsOiBudWxsLAoJZGlzdGFuY2U6IDEsCglkZWxheTogMAp9OwoK fSkoalF1ZXJ5KTsK ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline; filename=ui.datepicker.js Content-Type: application/x-javascript; charset=iso-8859-1; name=ui.datepicker.js Content-Location: http://bop.diba.es/js/datepicker/development-bundle/ui/ui.datepicker.js Content-Transfer-Encoding: Base64 LyoKICogalF1ZXJ5IFVJIERhdGVwaWNrZXIgMS43LjIKICoKICogQ29weXJpZ2h0 IChjKSAyMDA5IEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0 KQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgKE1JVC1MSUNFTlNFLnR4 dCkKICogYW5kIEdQTCAoR1BMLUxJQ0VOU0UudHh0KSBsaWNlbnNlcy4KICoKICog aHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9VSS9EYXRlcGlja2VyCiAqCiAqIERlcGVu ZHM6CiAqCXVpLmNvcmUuanMKICovCgooZnVuY3Rpb24oJCkgeyAvLyBoaWRlIHRo ZSBuYW1lc3BhY2UKCiQuZXh0ZW5kKCQudWksIHsgZGF0ZXBpY2tlcjogeyB2ZXJz aW9uOiAiMS43LjIiIH0gfSk7Cgp2YXIgUFJPUF9OQU1FID0gJ2RhdGVwaWNrZXIn OwoKLyogRGF0ZSBwaWNrZXIgbWFuYWdlci4KICAgVXNlIHRoZSBzaW5nbGV0b24g aW5zdGFuY2Ugb2YgdGhpcyBjbGFzcywgJC5kYXRlcGlja2VyLCB0byBpbnRlcmFj dCB3aXRoIHRoZSBkYXRlIHBpY2tlci4KICAgU2V0dGluZ3MgZm9yIChncm91cHMg b2YpIGRhdGUgcGlja2VycyBhcmUgbWFpbnRhaW5lZCBpbiBhbiBpbnN0YW5jZSBv YmplY3QsCiAgIGFsbG93aW5nIG11bHRpcGxlIGRpZmZlcmVudCBzZXR0aW5ncyBv biB0aGUgc2FtZSBwYWdlLiAqLwoKZnVuY3Rpb24gRGF0ZXBpY2tlcigpIHsKCXRo aXMuZGVidWcgPSBmYWxzZTsgLy8gQ2hhbmdlIHRoaXMgdG8gdHJ1ZSB0byBzdGFy dCBkZWJ1Z2dpbmcKCXRoaXMuX2N1ckluc3QgPSBudWxsOyAvLyBUaGUgY3VycmVu dCBpbnN0YW5jZSBpbiB1c2UKCXRoaXMuX2tleUV2ZW50ID0gZmFsc2U7IC8vIElm IHRoZSBsYXN0IGV2ZW50IHdhcyBhIGtleSBldmVudAoJdGhpcy5fZGlzYWJsZWRJ bnB1dHMgPSBbXTsgLy8gTGlzdCBvZiBkYXRlIHBpY2tlciBpbnB1dHMgdGhhdCBo YXZlIGJlZW4gZGlzYWJsZWQKCXRoaXMuX2RhdGVwaWNrZXJTaG93aW5nID0gZmFs c2U7IC8vIFRydWUgaWYgdGhlIHBvcHVwIHBpY2tlciBpcyBzaG93aW5nICwgZmFs c2UgaWYgbm90Cgl0aGlzLl9pbkRpYWxvZyA9IGZhbHNlOyAvLyBUcnVlIGlmIHNo b3dpbmcgd2l0aGluIGEgImRpYWxvZyIsIGZhbHNlIGlmIG5vdAoJdGhpcy5fbWFp bkRpdklkID0gJ3VpLWRhdGVwaWNrZXItZGl2JzsgLy8gVGhlIElEIG9mIHRoZSBt YWluIGRhdGVwaWNrZXIgZGl2aXNpb24KCXRoaXMuX2lubGluZUNsYXNzID0gJ3Vp LWRhdGVwaWNrZXItaW5saW5lJzsgLy8gVGhlIG5hbWUgb2YgdGhlIGlubGluZSBt YXJrZXIgY2xhc3MKCXRoaXMuX2FwcGVuZENsYXNzID0gJ3VpLWRhdGVwaWNrZXIt YXBwZW5kJzsgLy8gVGhlIG5hbWUgb2YgdGhlIGFwcGVuZCBtYXJrZXIgY2xhc3MK CXRoaXMuX3RyaWdnZXJDbGFzcyA9ICd1aS1kYXRlcGlja2VyLXRyaWdnZXInOyAv LyBUaGUgbmFtZSBvZiB0aGUgdHJpZ2dlciBtYXJrZXIgY2xhc3MKCXRoaXMuX2Rp YWxvZ0NsYXNzID0gJ3VpLWRhdGVwaWNrZXItZGlhbG9nJzsgLy8gVGhlIG5hbWUg b2YgdGhlIGRpYWxvZyBtYXJrZXIgY2xhc3MKCXRoaXMuX2Rpc2FibGVDbGFzcyA9 ICd1aS1kYXRlcGlja2VyLWRpc2FibGVkJzsgLy8gVGhlIG5hbWUgb2YgdGhlIGRp c2FibGVkIGNvdmVyaW5nIG1hcmtlciBjbGFzcwoJdGhpcy5fdW5zZWxlY3RhYmxl Q2xhc3MgPSAndWktZGF0ZXBpY2tlci11bnNlbGVjdGFibGUnOyAvLyBUaGUgbmFt ZSBvZiB0aGUgdW5zZWxlY3RhYmxlIGNlbGwgbWFya2VyIGNsYXNzCgl0aGlzLl9j dXJyZW50Q2xhc3MgPSAndWktZGF0ZXBpY2tlci1jdXJyZW50LWRheSc7IC8vIFRo ZSBuYW1lIG9mIHRoZSBjdXJyZW50IGRheSBtYXJrZXIgY2xhc3MKCXRoaXMuX2Rh eU92ZXJDbGFzcyA9ICd1aS1kYXRlcGlja2VyLWRheXMtY2VsbC1vdmVyJzsgLy8g VGhlIG5hbWUgb2YgdGhlIGRheSBob3ZlciBtYXJrZXIgY2xhc3MKCXRoaXMucmVn aW9uYWwgPSBbXTsgLy8gQXZhaWxhYmxlIHJlZ2lvbmFsIHNldHRpbmdzLCBpbmRl eGVkIGJ5IGxhbmd1YWdlIGNvZGUKCXRoaXMucmVnaW9uYWxbJyddID0geyAvLyBE ZWZhdWx0IHJlZ2lvbmFsIHNldHRpbmdzCgkJY2xvc2VUZXh0OiAnRG9uZScsIC8v IERpc3BsYXkgdGV4dCBmb3IgY2xvc2UgbGluawoJCXByZXZUZXh0OiAnUHJldics IC8vIERpc3BsYXkgdGV4dCBmb3IgcHJldmlvdXMgbW9udGggbGluawoJCW5leHRU ZXh0OiAnTmV4dCcsIC8vIERpc3BsYXkgdGV4dCBmb3IgbmV4dCBtb250aCBsaW5r CgkJY3VycmVudFRleHQ6ICdUb2RheScsIC8vIERpc3BsYXkgdGV4dCBmb3IgY3Vy cmVudCBtb250aCBsaW5rCgkJbW9udGhOYW1lczogWydKYW51YXJ5JywnRmVicnVh cnknLCdNYXJjaCcsJ0FwcmlsJywnTWF5JywnSnVuZScsCgkJCSdKdWx5JywnQXVn dXN0JywnU2VwdGVtYmVyJywnT2N0b2JlcicsJ05vdmVtYmVyJywnRGVjZW1iZXIn XSwgLy8gTmFtZXMgb2YgbW9udGhzIGZvciBkcm9wLWRvd24gYW5kIGZvcm1hdHRp bmcKCQltb250aE5hbWVzU2hvcnQ6IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXBy JywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05v dicsICdEZWMnXSwgLy8gRm9yIGZvcm1hdHRpbmcKCQlkYXlOYW1lczogWydTdW5k YXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5 JywgJ0ZyaWRheScsICdTYXR1cmRheSddLCAvLyBGb3IgZm9ybWF0dGluZwoJCWRh eU5hbWVzU2hvcnQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScs ICdGcmknLCAnU2F0J10sIC8vIEZvciBmb3JtYXR0aW5nCgkJZGF5TmFtZXNNaW46 IFsnU3UnLCdNbycsJ1R1JywnV2UnLCdUaCcsJ0ZyJywnU2EnXSwgLy8gQ29sdW1u IGhlYWRpbmdzIGZvciBkYXlzIHN0YXJ0aW5nIGF0IFN1bmRheQoJCWRhdGVGb3Jt YXQ6ICdtbS9kZC95eScsIC8vIFNlZSBmb3JtYXQgb3B0aW9ucyBvbiBwYXJzZURh dGUKCQlmaXJzdERheTogMCwgLy8gVGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlaywg U3VuID0gMCwgTW9uID0gMSwgLi4uCgkJaXNSVEw6IGZhbHNlIC8vIFRydWUgaWYg cmlnaHQtdG8tbGVmdCBsYW5ndWFnZSwgZmFsc2UgaWYgbGVmdC10by1yaWdodAoJ fTsKCXRoaXMuX2RlZmF1bHRzID0geyAvLyBHbG9iYWwgZGVmYXVsdHMgZm9yIGFs bCB0aGUgZGF0ZSBwaWNrZXIgaW5zdGFuY2VzCgkJc2hvd09uOiAnZm9jdXMnLCAv LyAnZm9jdXMnIGZvciBwb3B1cCBvbiBmb2N1cywKCQkJLy8gJ2J1dHRvbicgZm9y IHRyaWdnZXIgYnV0dG9uLCBvciAnYm90aCcgZm9yIGVpdGhlcgoJCXNob3dBbmlt OiAnc2hvdycsIC8vIE5hbWUgb2YgalF1ZXJ5IGFuaW1hdGlvbiBmb3IgcG9wdXAK CQlzaG93T3B0aW9uczoge30sIC8vIE9wdGlvbnMgZm9yIGVuaGFuY2VkIGFuaW1h dGlvbnMKCQlkZWZhdWx0RGF0ZTogbnVsbCwgLy8gVXNlZCB3aGVuIGZpZWxkIGlz IGJsYW5rOiBhY3R1YWwgZGF0ZSwKCQkJLy8gKy8tbnVtYmVyIGZvciBvZmZzZXQg ZnJvbSB0b2RheSwgbnVsbCBmb3IgdG9kYXkKCQlhcHBlbmRUZXh0OiAnJywgLy8g RGlzcGxheSB0ZXh0IGZvbGxvd2luZyB0aGUgaW5wdXQgYm94LCBlLmcuIHNob3dp bmcgdGhlIGZvcm1hdAoJCWJ1dHRvblRleHQ6ICcuLi4nLCAvLyBUZXh0IGZvciB0 cmlnZ2VyIGJ1dHRvbgoJCWJ1dHRvbkltYWdlOiAnJywgLy8gVVJMIGZvciB0cmln Z2VyIGJ1dHRvbiBpbWFnZQoJCWJ1dHRvbkltYWdlT25seTogZmFsc2UsIC8vIFRy dWUgaWYgdGhlIGltYWdlIGFwcGVhcnMgYWxvbmUsIGZhbHNlIGlmIGl0IGFwcGVh cnMgb24gYSBidXR0b24KCQloaWRlSWZOb1ByZXZOZXh0OiBmYWxzZSwgLy8gVHJ1 ZSB0byBoaWRlIG5leHQvcHJldmlvdXMgbW9udGggbGlua3MKCQkJLy8gaWYgbm90 IGFwcGxpY2FibGUsIGZhbHNlIHRvIGp1c3QgZGlzYWJsZSB0aGVtCgkJbmF2aWdh dGlvbkFzRGF0ZUZvcm1hdDogZmFsc2UsIC8vIFRydWUgaWYgZGF0ZSBmb3JtYXR0 aW5nIGFwcGxpZWQgdG8gcHJldi90b2RheS9uZXh0IGxpbmtzCgkJZ290b0N1cnJl bnQ6IGZhbHNlLCAvLyBUcnVlIGlmIHRvZGF5IGxpbmsgZ29lcyBiYWNrIHRvIGN1 cnJlbnQgc2VsZWN0aW9uIGluc3RlYWQKCQljaGFuZ2VNb250aDogZmFsc2UsIC8v IFRydWUgaWYgbW9udGggY2FuIGJlIHNlbGVjdGVkIGRpcmVjdGx5LCBmYWxzZSBp ZiBvbmx5IHByZXYvbmV4dAoJCWNoYW5nZVllYXI6IGZhbHNlLCAvLyBUcnVlIGlm IHllYXIgY2FuIGJlIHNlbGVjdGVkIGRpcmVjdGx5LCBmYWxzZSBpZiBvbmx5IHBy ZXYvbmV4dAoJCXNob3dNb250aEFmdGVyWWVhcjogZmFsc2UsIC8vIFRydWUgaWYg dGhlIHllYXIgc2VsZWN0IHByZWNlZGVzIG1vbnRoLCBmYWxzZSBmb3IgbW9udGgg dGhlbiB5ZWFyCgkJeWVhclJhbmdlOiAnLTEwOisxMCcsIC8vIFJhbmdlIG9mIHll YXJzIHRvIGRpc3BsYXkgaW4gZHJvcC1kb3duLAoJCQkvLyBlaXRoZXIgcmVsYXRp dmUgdG8gY3VycmVudCB5ZWFyICgtbm46K25uKSBvciBhYnNvbHV0ZSAobm5ubjpu bm5uKQoJCXNob3dPdGhlck1vbnRoczogZmFsc2UsIC8vIFRydWUgdG8gc2hvdyBk YXRlcyBpbiBvdGhlciBtb250aHMsIGZhbHNlIHRvIGxlYXZlIGJsYW5rCgkJY2Fs Y3VsYXRlV2VlazogdGhpcy5pc284NjAxV2VlaywgLy8gSG93IHRvIGNhbGN1bGF0 ZSB0aGUgd2VlayBvZiB0aGUgeWVhciwKCQkJLy8gdGFrZXMgYSBEYXRlIGFuZCBy ZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIHdlZWsgZm9yIGl0CgkJc2hvcnRZZWFy Q3V0b2ZmOiAnKzEwJywgLy8gU2hvcnQgeWVhciB2YWx1ZXMgPCB0aGlzIGFyZSBp biB0aGUgY3VycmVudCBjZW50dXJ5LAoJCQkvLyA+IHRoaXMgYXJlIGluIHRoZSBw cmV2aW91cyBjZW50dXJ5LAoJCQkvLyBzdHJpbmcgdmFsdWUgc3RhcnRpbmcgd2l0 aCAnKycgZm9yIGN1cnJlbnQgeWVhciArIHZhbHVlCgkJbWluRGF0ZTogbnVsbCwg Ly8gVGhlIGVhcmxpZXN0IHNlbGVjdGFibGUgZGF0ZSwgb3IgbnVsbCBmb3Igbm8g bGltaXQKCQltYXhEYXRlOiBudWxsLCAvLyBUaGUgbGF0ZXN0IHNlbGVjdGFibGUg ZGF0ZSwgb3IgbnVsbCBmb3Igbm8gbGltaXQKCQlkdXJhdGlvbjogJ25vcm1hbCcs IC8vIER1cmF0aW9uIG9mIGRpc3BsYXkvY2xvc3VyZQoJCWJlZm9yZVNob3dEYXk6 IG51bGwsIC8vIEZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBkYXRlIGFuZCByZXR1cm5z IGFuIGFycmF5IHdpdGgKCQkJLy8gWzBdID0gdHJ1ZSBpZiBzZWxlY3RhYmxlLCBm YWxzZSBpZiBub3QsIFsxXSA9IGN1c3RvbSBDU1MgY2xhc3MgbmFtZShzKSBvciAn JywKCQkJLy8gWzJdID0gY2VsbCB0aXRsZSAob3B0aW9uYWwpLCBlLmcuICQuZGF0 ZXBpY2tlci5ub1dlZWtlbmRzCgkJYmVmb3JlU2hvdzogbnVsbCwgLy8gRnVuY3Rp b24gdGhhdCB0YWtlcyBhbiBpbnB1dCBmaWVsZCBhbmQKCQkJLy8gcmV0dXJucyBh IHNldCBvZiBjdXN0b20gc2V0dGluZ3MgZm9yIHRoZSBkYXRlIHBpY2tlcgoJCW9u U2VsZWN0OiBudWxsLCAvLyBEZWZpbmUgYSBjYWxsYmFjayBmdW5jdGlvbiB3aGVu IGEgZGF0ZSBpcyBzZWxlY3RlZAoJCW9uQ2hhbmdlTW9udGhZZWFyOiBudWxsLCAv LyBEZWZpbmUgYSBjYWxsYmFjayBmdW5jdGlvbiB3aGVuIHRoZSBtb250aCBvciB5 ZWFyIGlzIGNoYW5nZWQKCQlvbkNsb3NlOiBudWxsLCAvLyBEZWZpbmUgYSBjYWxs YmFjayBmdW5jdGlvbiB3aGVuIHRoZSBkYXRlcGlja2VyIGlzIGNsb3NlZAoJCW51 bWJlck9mTW9udGhzOiAxLCAvLyBOdW1iZXIgb2YgbW9udGhzIHRvIHNob3cgYXQg YSB0aW1lCgkJc2hvd0N1cnJlbnRBdFBvczogMCwgLy8gVGhlIHBvc2l0aW9uIGlu IG11bHRpcGUgbW9udGhzIGF0IHdoaWNoIHRvIHNob3cgdGhlIGN1cnJlbnQgbW9u dGggKHN0YXJ0aW5nIGF0IDApCgkJc3RlcE1vbnRoczogMSwgLy8gTnVtYmVyIG9m IG1vbnRocyB0byBzdGVwIGJhY2svZm9yd2FyZAoJCXN0ZXBCaWdNb250aHM6IDEy LCAvLyBOdW1iZXIgb2YgbW9udGhzIHRvIHN0ZXAgYmFjay9mb3J3YXJkIGZvciB0 aGUgYmlnIGxpbmtzCgkJYWx0RmllbGQ6ICcnLCAvLyBTZWxlY3RvciBmb3IgYW4g YWx0ZXJuYXRlIGZpZWxkIHRvIHN0b3JlIHNlbGVjdGVkIGRhdGVzIGludG8KCQlh bHRGb3JtYXQ6ICcnLCAvLyBUaGUgZGF0ZSBmb3JtYXQgdG8gdXNlIGZvciB0aGUg YWx0ZXJuYXRlIGZpZWxkCgkJY29uc3RyYWluSW5wdXQ6IHRydWUsIC8vIFRoZSBp bnB1dCBpcyBjb25zdHJhaW5lZCBieSB0aGUgY3VycmVudCBkYXRlIGZvcm1hdAoJ CXNob3dCdXR0b25QYW5lbDogZmFsc2UgLy8gVHJ1ZSB0byBzaG93IGJ1dHRvbiBw YW5lbCwgZmFsc2UgdG8gbm90IHNob3cgaXQKCX07CgkkLmV4dGVuZCh0aGlzLl9k ZWZhdWx0cywgdGhpcy5yZWdpb25hbFsnJ10pOwoJdGhpcy5kcERpdiA9ICQoJzxk aXYgaWQ9IicgKyB0aGlzLl9tYWluRGl2SWQgKyAnIiBjbGFzcz0idWktZGF0ZXBp Y2tlciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFy Zml4IHVpLWNvcm5lci1hbGwgdWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlIj48 L2Rpdj4nKTsKfQoKJC5leHRlbmQoRGF0ZXBpY2tlci5wcm90b3R5cGUsIHsKCS8q IENsYXNzIG5hbWUgYWRkZWQgdG8gZWxlbWVudHMgdG8gaW5kaWNhdGUgYWxyZWFk eSBjb25maWd1cmVkIHdpdGggYSBkYXRlIHBpY2tlci4gKi8KCW1hcmtlckNsYXNz TmFtZTogJ2hhc0RhdGVwaWNrZXInLAoKCS8qIERlYnVnIGxvZ2dpbmcgKGlmIGVu YWJsZWQpLiAqLwoJbG9nOiBmdW5jdGlvbiAoKSB7CgkJaWYgKHRoaXMuZGVidWcp CgkJCWNvbnNvbGUubG9nLmFwcGx5KCcnLCBhcmd1bWVudHMpOwoJfSwKCgkvKiBP dmVycmlkZSB0aGUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgYWxsIGluc3RhbmNlcyBv ZiB0aGUgZGF0ZSBwaWNrZXIuCgkgICBAcGFyYW0gIHNldHRpbmdzICBvYmplY3Qg LSB0aGUgbmV3IHNldHRpbmdzIHRvIHVzZSBhcyBkZWZhdWx0cyAoYW5vbnltb3Vz IG9iamVjdCkKCSAgIEByZXR1cm4gdGhlIG1hbmFnZXIgb2JqZWN0ICovCglzZXRE ZWZhdWx0czogZnVuY3Rpb24oc2V0dGluZ3MpIHsKCQlleHRlbmRSZW1vdmUodGhp cy5fZGVmYXVsdHMsIHNldHRpbmdzIHx8IHt9KTsKCQlyZXR1cm4gdGhpczsKCX0s CgoJLyogQXR0YWNoIHRoZSBkYXRlIHBpY2tlciB0byBhIGpRdWVyeSBzZWxlY3Rp b24uCgkgICBAcGFyYW0gIHRhcmdldCAgICBlbGVtZW50IC0gdGhlIHRhcmdldCBp bnB1dCBmaWVsZCBvciBkaXZpc2lvbiBvciBzcGFuCgkgICBAcGFyYW0gIHNldHRp bmdzICBvYmplY3QgLSB0aGUgbmV3IHNldHRpbmdzIHRvIHVzZSBmb3IgdGhpcyBk YXRlIHBpY2tlciBpbnN0YW5jZSAoYW5vbnltb3VzKSAqLwoJX2F0dGFjaERhdGVw aWNrZXI6IGZ1bmN0aW9uKHRhcmdldCwgc2V0dGluZ3MpIHsKCQkvLyBjaGVjayBm b3Igc2V0dGluZ3Mgb24gdGhlIGNvbnRyb2wgaXRzZWxmIC0gaW4gbmFtZXNwYWNl ICdkYXRlOicKCQl2YXIgaW5saW5lU2V0dGluZ3MgPSBudWxsOwoJCWZvciAodmFy IGF0dHJOYW1lIGluIHRoaXMuX2RlZmF1bHRzKSB7CgkJCXZhciBhdHRyVmFsdWUg PSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRlOicgKyBhdHRyTmFtZSk7CgkJCWlm IChhdHRyVmFsdWUpIHsKCQkJCWlubGluZVNldHRpbmdzID0gaW5saW5lU2V0dGlu Z3MgfHwge307CgkJCQl0cnkgewoJCQkJCWlubGluZVNldHRpbmdzW2F0dHJOYW1l XSA9IGV2YWwoYXR0clZhbHVlKTsKCQkJCX0gY2F0Y2ggKGVycikgewoJCQkJCWlu bGluZVNldHRpbmdzW2F0dHJOYW1lXSA9IGF0dHJWYWx1ZTsKCQkJCX0KCQkJfQoJ CX0KCQl2YXIgbm9kZU5hbWUgPSB0YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2Uo KTsKCQl2YXIgaW5saW5lID0gKG5vZGVOYW1lID09ICdkaXYnIHx8IG5vZGVOYW1l ID09ICdzcGFuJyk7CgkJaWYgKCF0YXJnZXQuaWQpCgkJCXRhcmdldC5pZCA9ICdk cCcgKyAoKyt0aGlzLnV1aWQpOwoJCXZhciBpbnN0ID0gdGhpcy5fbmV3SW5zdCgk KHRhcmdldCksIGlubGluZSk7CgkJaW5zdC5zZXR0aW5ncyA9ICQuZXh0ZW5kKHt9 LCBzZXR0aW5ncyB8fCB7fSwgaW5saW5lU2V0dGluZ3MgfHwge30pOwoJCWlmIChu b2RlTmFtZSA9PSAnaW5wdXQnKSB7CgkJCXRoaXMuX2Nvbm5lY3REYXRlcGlja2Vy KHRhcmdldCwgaW5zdCk7CgkJfSBlbHNlIGlmIChpbmxpbmUpIHsKCQkJdGhpcy5f aW5saW5lRGF0ZXBpY2tlcih0YXJnZXQsIGluc3QpOwoJCX0KCX0sCgoJLyogQ3Jl YXRlIGEgbmV3IGluc3RhbmNlIG9iamVjdC4gKi8KCV9uZXdJbnN0OiBmdW5jdGlv bih0YXJnZXQsIGlubGluZSkgewoJCXZhciBpZCA9IHRhcmdldFswXS5pZC5yZXBs YWNlKC8oWzpcW1xdXC5dKS9nLCAnXFxcXCQxJyk7IC8vIGVzY2FwZSBqUXVlcnkg bWV0YSBjaGFycwoJCXJldHVybiB7aWQ6IGlkLCBpbnB1dDogdGFyZ2V0LCAvLyBh c3NvY2lhdGVkIHRhcmdldAoJCQlzZWxlY3RlZERheTogMCwgc2VsZWN0ZWRNb250 aDogMCwgc2VsZWN0ZWRZZWFyOiAwLCAvLyBjdXJyZW50IHNlbGVjdGlvbgoJCQlk cmF3TW9udGg6IDAsIGRyYXdZZWFyOiAwLCAvLyBtb250aCBiZWluZyBkcmF3bgoJ CQlpbmxpbmU6IGlubGluZSwgLy8gaXMgZGF0ZXBpY2tlciBpbmxpbmUgb3Igbm90 CgkJCWRwRGl2OiAoIWlubGluZSA/IHRoaXMuZHBEaXYgOiAvLyBwcmVzZW50YXRp b24gZGl2CgkJCSQoJzxkaXYgY2xhc3M9IicgKyB0aGlzLl9pbmxpbmVDbGFzcyAr ICcgdWktZGF0ZXBpY2tlciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWkt aGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1hbGwiPjwvZGl2PicpKX07Cgl9LAoK CS8qIEF0dGFjaCB0aGUgZGF0ZSBwaWNrZXIgdG8gYW4gaW5wdXQgZmllbGQuICov CglfY29ubmVjdERhdGVwaWNrZXI6IGZ1bmN0aW9uKHRhcmdldCwgaW5zdCkgewoJ CXZhciBpbnB1dCA9ICQodGFyZ2V0KTsKCQlpbnN0LmFwcGVuZCA9ICQoW10pOwoJ CWluc3QudHJpZ2dlciA9ICQoW10pOwoJCWlmIChpbnB1dC5oYXNDbGFzcyh0aGlz Lm1hcmtlckNsYXNzTmFtZSkpCgkJCXJldHVybjsKCQl2YXIgYXBwZW5kVGV4dCA9 IHRoaXMuX2dldChpbnN0LCAnYXBwZW5kVGV4dCcpOwoJCXZhciBpc1JUTCA9IHRo aXMuX2dldChpbnN0LCAnaXNSVEwnKTsKCQlpZiAoYXBwZW5kVGV4dCkgewoJCQlp bnN0LmFwcGVuZCA9ICQoJzxzcGFuIGNsYXNzPSInICsgdGhpcy5fYXBwZW5kQ2xh c3MgKyAnIj4nICsgYXBwZW5kVGV4dCArICc8L3NwYW4+Jyk7CgkJCWlucHV0W2lz UlRMID8gJ2JlZm9yZScgOiAnYWZ0ZXInXShpbnN0LmFwcGVuZCk7CgkJfQoJCXZh ciBzaG93T24gPSB0aGlzLl9nZXQoaW5zdCwgJ3Nob3dPbicpOwoJCWlmIChzaG93 T24gPT0gJ2ZvY3VzJyB8fCBzaG93T24gPT0gJ2JvdGgnKSAvLyBwb3AtdXAgZGF0 ZSBwaWNrZXIgd2hlbiBpbiB0aGUgbWFya2VkIGZpZWxkCgkJCWlucHV0LmZvY3Vz KHRoaXMuX3Nob3dEYXRlcGlja2VyKTsKCQlpZiAoc2hvd09uID09ICdidXR0b24n IHx8IHNob3dPbiA9PSAnYm90aCcpIHsgLy8gcG9wLXVwIGRhdGUgcGlja2VyIHdo ZW4gYnV0dG9uIGNsaWNrZWQKCQkJdmFyIGJ1dHRvblRleHQgPSB0aGlzLl9nZXQo aW5zdCwgJ2J1dHRvblRleHQnKTsKCQkJdmFyIGJ1dHRvbkltYWdlID0gdGhpcy5f Z2V0KGluc3QsICdidXR0b25JbWFnZScpOwoJCQlpbnN0LnRyaWdnZXIgPSAkKHRo aXMuX2dldChpbnN0LCAnYnV0dG9uSW1hZ2VPbmx5JykgPwoJCQkJJCgnPGltZy8+ JykuYWRkQ2xhc3ModGhpcy5fdHJpZ2dlckNsYXNzKS4KCQkJCQlhdHRyKHsgc3Jj OiBidXR0b25JbWFnZSwgYWx0OiBidXR0b25UZXh0LCB0aXRsZTogYnV0dG9uVGV4 dCB9KSA6CgkJCQkkKCc8YnV0dG9uIHR5cGU9ImJ1dHRvbiI+PC9idXR0b24+Jyku YWRkQ2xhc3ModGhpcy5fdHJpZ2dlckNsYXNzKS4KCQkJCQlodG1sKGJ1dHRvbklt YWdlID09ICcnID8gYnV0dG9uVGV4dCA6ICQoJzxpbWcvPicpLmF0dHIoCgkJCQkJ eyBzcmM6YnV0dG9uSW1hZ2UsIGFsdDpidXR0b25UZXh0LCB0aXRsZTpidXR0b25U ZXh0IH0pKSk7CgkJCWlucHV0W2lzUlRMID8gJ2JlZm9yZScgOiAnYWZ0ZXInXShp bnN0LnRyaWdnZXIpOwoJCQlpbnN0LnRyaWdnZXIuY2xpY2soZnVuY3Rpb24oKSB7 CgkJCQlpZiAoJC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyAmJiAkLmRh dGVwaWNrZXIuX2xhc3RJbnB1dCA9PSB0YXJnZXQpCgkJCQkJJC5kYXRlcGlja2Vy Ll9oaWRlRGF0ZXBpY2tlcigpOwoJCQkJZWxzZQoJCQkJCSQuZGF0ZXBpY2tlci5f c2hvd0RhdGVwaWNrZXIodGFyZ2V0KTsKCQkJCXJldHVybiBmYWxzZTsKCQkJfSk7 CgkJfQoJCWlucHV0LmFkZENsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5rZXlk b3duKHRoaXMuX2RvS2V5RG93bikua2V5cHJlc3ModGhpcy5fZG9LZXlQcmVzcyku CgkJCWJpbmQoInNldERhdGEuZGF0ZXBpY2tlciIsIGZ1bmN0aW9uKGV2ZW50LCBr ZXksIHZhbHVlKSB7CgkJCQlpbnN0LnNldHRpbmdzW2tleV0gPSB2YWx1ZTsKCQkJ fSkuYmluZCgiZ2V0RGF0YS5kYXRlcGlja2VyIiwgZnVuY3Rpb24oZXZlbnQsIGtl eSkgewoJCQkJcmV0dXJuIHRoaXMuX2dldChpbnN0LCBrZXkpOwoJCQl9KTsKCQkk LmRhdGEodGFyZ2V0LCBQUk9QX05BTUUsIGluc3QpOwoJfSwKCgkvKiBBdHRhY2gg YW4gaW5saW5lIGRhdGUgcGlja2VyIHRvIGEgZGl2LiAqLwoJX2lubGluZURhdGVw aWNrZXI6IGZ1bmN0aW9uKHRhcmdldCwgaW5zdCkgewoJCXZhciBkaXZTcGFuID0g JCh0YXJnZXQpOwoJCWlmIChkaXZTcGFuLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xh c3NOYW1lKSkKCQkJcmV0dXJuOwoJCWRpdlNwYW4uYWRkQ2xhc3ModGhpcy5tYXJr ZXJDbGFzc05hbWUpLmFwcGVuZChpbnN0LmRwRGl2KS4KCQkJYmluZCgic2V0RGF0 YS5kYXRlcGlja2VyIiwgZnVuY3Rpb24oZXZlbnQsIGtleSwgdmFsdWUpewoJCQkJ aW5zdC5zZXR0aW5nc1trZXldID0gdmFsdWU7CgkJCX0pLmJpbmQoImdldERhdGEu ZGF0ZXBpY2tlciIsIGZ1bmN0aW9uKGV2ZW50LCBrZXkpewoJCQkJcmV0dXJuIHRo aXMuX2dldChpbnN0LCBrZXkpOwoJCQl9KTsKCQkkLmRhdGEodGFyZ2V0LCBQUk9Q X05BTUUsIGluc3QpOwoJCXRoaXMuX3NldERhdGUoaW5zdCwgdGhpcy5fZ2V0RGVm YXVsdERhdGUoaW5zdCkpOwoJCXRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaW5zdCk7 CgkJdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGluc3QpOwoJfSwKCgkvKiBQb3AtdXAg dGhlIGRhdGUgcGlja2VyIGluIGEgImRpYWxvZyIgYm94LgoJICAgQHBhcmFtICBp bnB1dCAgICAgZWxlbWVudCAtIGlnbm9yZWQKCSAgIEBwYXJhbSAgZGF0ZVRleHQg IHN0cmluZyAtIHRoZSBpbml0aWFsIGRhdGUgdG8gZGlzcGxheSAoaW4gdGhlIGN1 cnJlbnQgZm9ybWF0KQoJICAgQHBhcmFtICBvblNlbGVjdCAgZnVuY3Rpb24gLSB0 aGUgZnVuY3Rpb24oZGF0ZVRleHQpIHRvIGNhbGwgd2hlbiBhIGRhdGUgaXMgc2Vs ZWN0ZWQKCSAgIEBwYXJhbSAgc2V0dGluZ3MgIG9iamVjdCAtIHVwZGF0ZSB0aGUg ZGlhbG9nIGRhdGUgcGlja2VyIGluc3RhbmNlJ3Mgc2V0dGluZ3MgKGFub255bW91 cyBvYmplY3QpCgkgICBAcGFyYW0gIHBvcyAgICAgICBpbnRbMl0gLSBjb29yZGlu YXRlcyBmb3IgdGhlIGRpYWxvZydzIHBvc2l0aW9uIHdpdGhpbiB0aGUgc2NyZWVu IG9yCgkgICAgICAgICAgICAgICAgICAgICBldmVudCAtIHdpdGggeC95IGNvb3Jk aW5hdGVzIG9yCgkgICAgICAgICAgICAgICAgICAgICBsZWF2ZSBlbXB0eSBmb3Ig ZGVmYXVsdCAoc2NyZWVuIGNlbnRyZSkKCSAgIEByZXR1cm4gdGhlIG1hbmFnZXIg b2JqZWN0ICovCglfZGlhbG9nRGF0ZXBpY2tlcjogZnVuY3Rpb24oaW5wdXQsIGRh dGVUZXh0LCBvblNlbGVjdCwgc2V0dGluZ3MsIHBvcykgewoJCXZhciBpbnN0ID0g dGhpcy5fZGlhbG9nSW5zdDsgLy8gaW50ZXJuYWwgaW5zdGFuY2UKCQlpZiAoIWlu c3QpIHsKCQkJdmFyIGlkID0gJ2RwJyArICgrK3RoaXMudXVpZCk7CgkJCXRoaXMu X2RpYWxvZ0lucHV0ID0gJCgnPGlucHV0IHR5cGU9InRleHQiIGlkPSInICsgaWQg KwoJCQkJJyIgc2l6ZT0iMSIgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9w OiAtMTAwcHg7Ii8+Jyk7CgkJCXRoaXMuX2RpYWxvZ0lucHV0LmtleWRvd24odGhp cy5fZG9LZXlEb3duKTsKCQkJJCgnYm9keScpLmFwcGVuZCh0aGlzLl9kaWFsb2dJ bnB1dCk7CgkJCWluc3QgPSB0aGlzLl9kaWFsb2dJbnN0ID0gdGhpcy5fbmV3SW5z dCh0aGlzLl9kaWFsb2dJbnB1dCwgZmFsc2UpOwoJCQlpbnN0LnNldHRpbmdzID0g e307CgkJCSQuZGF0YSh0aGlzLl9kaWFsb2dJbnB1dFswXSwgUFJPUF9OQU1FLCBp bnN0KTsKCQl9CgkJZXh0ZW5kUmVtb3ZlKGluc3Quc2V0dGluZ3MsIHNldHRpbmdz IHx8IHt9KTsKCQl0aGlzLl9kaWFsb2dJbnB1dC52YWwoZGF0ZVRleHQpOwoKCQl0 aGlzLl9wb3MgPSAocG9zID8gKHBvcy5sZW5ndGggPyBwb3MgOiBbcG9zLnBhZ2VY LCBwb3MucGFnZVldKSA6IG51bGwpOwoJCWlmICghdGhpcy5fcG9zKSB7CgkJCXZh ciBicm93c2VyV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aCB8fCBkb2N1bWVudC5k b2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHwJZG9jdW1lbnQuYm9keS5jbGll bnRXaWR0aDsKCQkJdmFyIGJyb3dzZXJIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWln aHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCB8fCBk b2N1bWVudC5ib2R5LmNsaWVudEhlaWdodDsKCQkJdmFyIHNjcm9sbFggPSBkb2N1 bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCB8fCBkb2N1bWVudC5ib2R5 LnNjcm9sbExlZnQ7CgkJCXZhciBzY3JvbGxZID0gZG9jdW1lbnQuZG9jdW1lbnRF bGVtZW50LnNjcm9sbFRvcCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcDsKCQkJ dGhpcy5fcG9zID0gLy8gc2hvdWxkIHVzZSBhY3R1YWwgd2lkdGgvaGVpZ2h0IGJl bG93CgkJCQlbKGJyb3dzZXJXaWR0aCAvIDIpIC0gMTAwICsgc2Nyb2xsWCwgKGJy b3dzZXJIZWlnaHQgLyAyKSAtIDE1MCArIHNjcm9sbFldOwoJCX0KCgkJLy8gbW92 ZSBpbnB1dCBvbiBzY3JlZW4gZm9yIGZvY3VzLCBidXQgaGlkZGVuIGJlaGluZCBk aWFsb2cKCQl0aGlzLl9kaWFsb2dJbnB1dC5jc3MoJ2xlZnQnLCB0aGlzLl9wb3Nb MF0gKyAncHgnKS5jc3MoJ3RvcCcsIHRoaXMuX3Bvc1sxXSArICdweCcpOwoJCWlu c3Quc2V0dGluZ3Mub25TZWxlY3QgPSBvblNlbGVjdDsKCQl0aGlzLl9pbkRpYWxv ZyA9IHRydWU7CgkJdGhpcy5kcERpdi5hZGRDbGFzcyh0aGlzLl9kaWFsb2dDbGFz cyk7CgkJdGhpcy5fc2hvd0RhdGVwaWNrZXIodGhpcy5fZGlhbG9nSW5wdXRbMF0p OwoJCWlmICgkLmJsb2NrVUkpCgkJCSQuYmxvY2tVSSh0aGlzLmRwRGl2KTsKCQkk LmRhdGEodGhpcy5fZGlhbG9nSW5wdXRbMF0sIFBST1BfTkFNRSwgaW5zdCk7CgkJ cmV0dXJuIHRoaXM7Cgl9LAoKCS8qIERldGFjaCBhIGRhdGVwaWNrZXIgZnJvbSBp dHMgY29udHJvbC4KCSAgIEBwYXJhbSAgdGFyZ2V0ICAgIGVsZW1lbnQgLSB0aGUg dGFyZ2V0IGlucHV0IGZpZWxkIG9yIGRpdmlzaW9uIG9yIHNwYW4gKi8KCV9kZXN0 cm95RGF0ZXBpY2tlcjogZnVuY3Rpb24odGFyZ2V0KSB7CgkJdmFyICR0YXJnZXQg PSAkKHRhcmdldCk7CgkJdmFyIGluc3QgPSAkLmRhdGEodGFyZ2V0LCBQUk9QX05B TUUpOwoJCWlmICghJHRhcmdldC5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFt ZSkpIHsKCQkJcmV0dXJuOwoJCX0KCQl2YXIgbm9kZU5hbWUgPSB0YXJnZXQubm9k ZU5hbWUudG9Mb3dlckNhc2UoKTsKCQkkLnJlbW92ZURhdGEodGFyZ2V0LCBQUk9Q X05BTUUpOwoJCWlmIChub2RlTmFtZSA9PSAnaW5wdXQnKSB7CgkJCWluc3QuYXBw ZW5kLnJlbW92ZSgpOwoJCQlpbnN0LnRyaWdnZXIucmVtb3ZlKCk7CgkJCSR0YXJn ZXQucmVtb3ZlQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLgoJCQkJdW5iaW5k KCdmb2N1cycsIHRoaXMuX3Nob3dEYXRlcGlja2VyKS4KCQkJCXVuYmluZCgna2V5 ZG93bicsIHRoaXMuX2RvS2V5RG93bikuCgkJCQl1bmJpbmQoJ2tleXByZXNzJywg dGhpcy5fZG9LZXlQcmVzcyk7CgkJfSBlbHNlIGlmIChub2RlTmFtZSA9PSAnZGl2 JyB8fCBub2RlTmFtZSA9PSAnc3BhbicpCgkJCSR0YXJnZXQucmVtb3ZlQ2xhc3Mo dGhpcy5tYXJrZXJDbGFzc05hbWUpLmVtcHR5KCk7Cgl9LAoKCS8qIEVuYWJsZSB0 aGUgZGF0ZSBwaWNrZXIgdG8gYSBqUXVlcnkgc2VsZWN0aW9uLgoJICAgQHBhcmFt ICB0YXJnZXQgICAgZWxlbWVudCAtIHRoZSB0YXJnZXQgaW5wdXQgZmllbGQgb3Ig ZGl2aXNpb24gb3Igc3BhbiAqLwoJX2VuYWJsZURhdGVwaWNrZXI6IGZ1bmN0aW9u KHRhcmdldCkgewoJCXZhciAkdGFyZ2V0ID0gJCh0YXJnZXQpOwoJCXZhciBpbnN0 ID0gJC5kYXRhKHRhcmdldCwgUFJPUF9OQU1FKTsKCQlpZiAoISR0YXJnZXQuaGFz Q2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpKSB7CgkJCXJldHVybjsKCQl9CgkJ dmFyIG5vZGVOYW1lID0gdGFyZ2V0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CgkJ aWYgKG5vZGVOYW1lID09ICdpbnB1dCcpIHsKCQkJdGFyZ2V0LmRpc2FibGVkID0g ZmFsc2U7CgkJCWluc3QudHJpZ2dlci5maWx0ZXIoJ2J1dHRvbicpLgoJCQkJZWFj aChmdW5jdGlvbigpIHsgdGhpcy5kaXNhYmxlZCA9IGZhbHNlOyB9KS5lbmQoKS4K CQkJCWZpbHRlcignaW1nJykuY3NzKHtvcGFjaXR5OiAnMS4wJywgY3Vyc29yOiAn J30pOwoJCX0KCQllbHNlIGlmIChub2RlTmFtZSA9PSAnZGl2JyB8fCBub2RlTmFt ZSA9PSAnc3BhbicpIHsKCQkJdmFyIGlubGluZSA9ICR0YXJnZXQuY2hpbGRyZW4o Jy4nICsgdGhpcy5faW5saW5lQ2xhc3MpOwoJCQlpbmxpbmUuY2hpbGRyZW4oKS5y ZW1vdmVDbGFzcygndWktc3RhdGUtZGlzYWJsZWQnKTsKCQl9CgkJdGhpcy5fZGlz YWJsZWRJbnB1dHMgPSAkLm1hcCh0aGlzLl9kaXNhYmxlZElucHV0cywKCQkJZnVu Y3Rpb24odmFsdWUpIHsgcmV0dXJuICh2YWx1ZSA9PSB0YXJnZXQgPyBudWxsIDog dmFsdWUpOyB9KTsgLy8gZGVsZXRlIGVudHJ5Cgl9LAoKCS8qIERpc2FibGUgdGhl IGRhdGUgcGlja2VyIHRvIGEgalF1ZXJ5IHNlbGVjdGlvbi4KCSAgIEBwYXJhbSAg dGFyZ2V0ICAgIGVsZW1lbnQgLSB0aGUgdGFyZ2V0IGlucHV0IGZpZWxkIG9yIGRp dmlzaW9uIG9yIHNwYW4gKi8KCV9kaXNhYmxlRGF0ZXBpY2tlcjogZnVuY3Rpb24o dGFyZ2V0KSB7CgkJdmFyICR0YXJnZXQgPSAkKHRhcmdldCk7CgkJdmFyIGluc3Qg PSAkLmRhdGEodGFyZ2V0LCBQUk9QX05BTUUpOwoJCWlmICghJHRhcmdldC5oYXND bGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkpIHsKCQkJcmV0dXJuOwoJCX0KCQl2 YXIgbm9kZU5hbWUgPSB0YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKCQlp ZiAobm9kZU5hbWUgPT0gJ2lucHV0JykgewoJCQl0YXJnZXQuZGlzYWJsZWQgPSB0 cnVlOwoJCQlpbnN0LnRyaWdnZXIuZmlsdGVyKCdidXR0b24nKS4KCQkJCWVhY2go ZnVuY3Rpb24oKSB7IHRoaXMuZGlzYWJsZWQgPSB0cnVlOyB9KS5lbmQoKS4KCQkJ CWZpbHRlcignaW1nJykuY3NzKHtvcGFjaXR5OiAnMC41JywgY3Vyc29yOiAnZGVm YXVsdCd9KTsKCQl9CgkJZWxzZSBpZiAobm9kZU5hbWUgPT0gJ2RpdicgfHwgbm9k ZU5hbWUgPT0gJ3NwYW4nKSB7CgkJCXZhciBpbmxpbmUgPSAkdGFyZ2V0LmNoaWxk cmVuKCcuJyArIHRoaXMuX2lubGluZUNsYXNzKTsKCQkJaW5saW5lLmNoaWxkcmVu KCkuYWRkQ2xhc3MoJ3VpLXN0YXRlLWRpc2FibGVkJyk7CgkJfQoJCXRoaXMuX2Rp c2FibGVkSW5wdXRzID0gJC5tYXAodGhpcy5fZGlzYWJsZWRJbnB1dHMsCgkJCWZ1 bmN0aW9uKHZhbHVlKSB7IHJldHVybiAodmFsdWUgPT0gdGFyZ2V0ID8gbnVsbCA6 IHZhbHVlKTsgfSk7IC8vIGRlbGV0ZSBlbnRyeQoJCXRoaXMuX2Rpc2FibGVkSW5w dXRzW3RoaXMuX2Rpc2FibGVkSW5wdXRzLmxlbmd0aF0gPSB0YXJnZXQ7Cgl9LAoK CS8qIElzIHRoZSBmaXJzdCBmaWVsZCBpbiBhIGpRdWVyeSBjb2xsZWN0aW9uIGRp c2FibGVkIGFzIGEgZGF0ZXBpY2tlcj8KCSAgIEBwYXJhbSAgdGFyZ2V0ICAgIGVs ZW1lbnQgLSB0aGUgdGFyZ2V0IGlucHV0IGZpZWxkIG9yIGRpdmlzaW9uIG9yIHNw YW4KCSAgIEByZXR1cm4gYm9vbGVhbiAtIHRydWUgaWYgZGlzYWJsZWQsIGZhbHNl IGlmIGVuYWJsZWQgKi8KCV9pc0Rpc2FibGVkRGF0ZXBpY2tlcjogZnVuY3Rpb24o dGFyZ2V0KSB7CgkJaWYgKCF0YXJnZXQpIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0K CQlmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2Rpc2FibGVkSW5wdXRzLmxlbmd0 aDsgaSsrKSB7CgkJCWlmICh0aGlzLl9kaXNhYmxlZElucHV0c1tpXSA9PSB0YXJn ZXQpCgkJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfSwKCgkv KiBSZXRyaWV2ZSB0aGUgaW5zdGFuY2UgZGF0YSBmb3IgdGhlIHRhcmdldCBjb250 cm9sLgoJICAgQHBhcmFtICB0YXJnZXQgIGVsZW1lbnQgLSB0aGUgdGFyZ2V0IGlu cHV0IGZpZWxkIG9yIGRpdmlzaW9uIG9yIHNwYW4KCSAgIEByZXR1cm4gIG9iamVj dCAtIHRoZSBhc3NvY2lhdGVkIGluc3RhbmNlIGRhdGEKCSAgIEB0aHJvd3MgIGVy cm9yIGlmIGEgalF1ZXJ5IHByb2JsZW0gZ2V0dGluZyBkYXRhICovCglfZ2V0SW5z dDogZnVuY3Rpb24odGFyZ2V0KSB7CgkJdHJ5IHsKCQkJcmV0dXJuICQuZGF0YSh0 YXJnZXQsIFBST1BfTkFNRSk7CgkJfQoJCWNhdGNoIChlcnIpIHsKCQkJdGhyb3cg J01pc3NpbmcgaW5zdGFuY2UgZGF0YSBmb3IgdGhpcyBkYXRlcGlja2VyJzsKCQl9 Cgl9LAoKCS8qIFVwZGF0ZSBvciByZXRyaWV2ZSB0aGUgc2V0dGluZ3MgZm9yIGEg ZGF0ZSBwaWNrZXIgYXR0YWNoZWQgdG8gYW4gaW5wdXQgZmllbGQgb3IgZGl2aXNp b24uCgkgICBAcGFyYW0gIHRhcmdldCAgZWxlbWVudCAtIHRoZSB0YXJnZXQgaW5w dXQgZmllbGQgb3IgZGl2aXNpb24gb3Igc3BhbgoJICAgQHBhcmFtICBuYW1lICAg IG9iamVjdCAtIHRoZSBuZXcgc2V0dGluZ3MgdG8gdXBkYXRlIG9yCgkgICAgICAg ICAgICAgICAgICAgc3RyaW5nIC0gdGhlIG5hbWUgb2YgdGhlIHNldHRpbmcgdG8g Y2hhbmdlIG9yIHJldHJpZXZlLAoJICAgICAgICAgICAgICAgICAgIHdoZW4gcmV0 cmlldmluZyBhbHNvICdhbGwnIGZvciBhbGwgaW5zdGFuY2Ugc2V0dGluZ3Mgb3IK CSAgICAgICAgICAgICAgICAgICAnZGVmYXVsdHMnIGZvciBhbGwgZ2xvYmFsIGRl ZmF1bHRzCgkgICBAcGFyYW0gIHZhbHVlICAgYW55IC0gdGhlIG5ldyB2YWx1ZSBm b3IgdGhlIHNldHRpbmcKCSAgICAgICAgICAgICAgICAgICAob21pdCBpZiBhYm92 ZSBpcyBhbiBvYmplY3Qgb3IgdG8gcmV0cmlldmUgYSB2YWx1ZSkgKi8KCV9vcHRp b25EYXRlcGlja2VyOiBmdW5jdGlvbih0YXJnZXQsIG5hbWUsIHZhbHVlKSB7CgkJ dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KHRhcmdldCk7CgkJaWYgKGFyZ3VtZW50 cy5sZW5ndGggPT0gMiAmJiB0eXBlb2YgbmFtZSA9PSAnc3RyaW5nJykgewoJCQly ZXR1cm4gKG5hbWUgPT0gJ2RlZmF1bHRzJyA/ICQuZXh0ZW5kKHt9LCAkLmRhdGVw aWNrZXIuX2RlZmF1bHRzKSA6CgkJCQkoaW5zdCA/IChuYW1lID09ICdhbGwnID8g JC5leHRlbmQoe30sIGluc3Quc2V0dGluZ3MpIDoKCQkJCXRoaXMuX2dldChpbnN0 LCBuYW1lKSkgOiBudWxsKSk7CgkJfQoJCXZhciBzZXR0aW5ncyA9IG5hbWUgfHwg e307CgkJaWYgKHR5cGVvZiBuYW1lID09ICdzdHJpbmcnKSB7CgkJCXNldHRpbmdz ID0ge307CgkJCXNldHRpbmdzW25hbWVdID0gdmFsdWU7CgkJfQoJCWlmIChpbnN0 KSB7CgkJCWlmICh0aGlzLl9jdXJJbnN0ID09IGluc3QpIHsKCQkJCXRoaXMuX2hp ZGVEYXRlcGlja2VyKG51bGwpOwoJCQl9CgkJCXZhciBkYXRlID0gdGhpcy5fZ2V0 RGF0ZURhdGVwaWNrZXIodGFyZ2V0KTsKCQkJZXh0ZW5kUmVtb3ZlKGluc3Quc2V0 dGluZ3MsIHNldHRpbmdzKTsKCQkJdGhpcy5fc2V0RGF0ZURhdGVwaWNrZXIodGFy Z2V0LCBkYXRlKTsKCQkJdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihpbnN0KTsKCQl9 Cgl9LAoKCS8vIGNoYW5nZSBtZXRob2QgZGVwcmVjYXRlZAoJX2NoYW5nZURhdGVw aWNrZXI6IGZ1bmN0aW9uKHRhcmdldCwgbmFtZSwgdmFsdWUpIHsKCQl0aGlzLl9v cHRpb25EYXRlcGlja2VyKHRhcmdldCwgbmFtZSwgdmFsdWUpOwoJfSwKCgkvKiBS ZWRyYXcgdGhlIGRhdGUgcGlja2VyIGF0dGFjaGVkIHRvIGFuIGlucHV0IGZpZWxk IG9yIGRpdmlzaW9uLgoJICAgQHBhcmFtICB0YXJnZXQgIGVsZW1lbnQgLSB0aGUg dGFyZ2V0IGlucHV0IGZpZWxkIG9yIGRpdmlzaW9uIG9yIHNwYW4gKi8KCV9yZWZy ZXNoRGF0ZXBpY2tlcjogZnVuY3Rpb24odGFyZ2V0KSB7CgkJdmFyIGluc3QgPSB0 aGlzLl9nZXRJbnN0KHRhcmdldCk7CgkJaWYgKGluc3QpIHsKCQkJdGhpcy5fdXBk YXRlRGF0ZXBpY2tlcihpbnN0KTsKCQl9Cgl9LAoKCS8qIFNldCB0aGUgZGF0ZXMg Zm9yIGEgalF1ZXJ5IHNlbGVjdGlvbi4KCSAgIEBwYXJhbSAgdGFyZ2V0ICAgZWxl bWVudCAtIHRoZSB0YXJnZXQgaW5wdXQgZmllbGQgb3IgZGl2aXNpb24gb3Igc3Bh bgoJICAgQHBhcmFtICBkYXRlICAgICBEYXRlIC0gdGhlIG5ldyBkYXRlCgkgICBA cGFyYW0gIGVuZERhdGUgIERhdGUgLSB0aGUgbmV3IGVuZCBkYXRlIGZvciBhIHJh bmdlIChvcHRpb25hbCkgKi8KCV9zZXREYXRlRGF0ZXBpY2tlcjogZnVuY3Rpb24o dGFyZ2V0LCBkYXRlLCBlbmREYXRlKSB7CgkJdmFyIGluc3QgPSB0aGlzLl9nZXRJ bnN0KHRhcmdldCk7CgkJaWYgKGluc3QpIHsKCQkJdGhpcy5fc2V0RGF0ZShpbnN0 LCBkYXRlLCBlbmREYXRlKTsKCQkJdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihpbnN0 KTsKCQkJdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGluc3QpOwoJCX0KCX0sCgoJLyog R2V0IHRoZSBkYXRlKHMpIGZvciB0aGUgZmlyc3QgZW50cnkgaW4gYSBqUXVlcnkg c2VsZWN0aW9uLgoJICAgQHBhcmFtICB0YXJnZXQgIGVsZW1lbnQgLSB0aGUgdGFy Z2V0IGlucHV0IGZpZWxkIG9yIGRpdmlzaW9uIG9yIHNwYW4KCSAgIEByZXR1cm4g RGF0ZSAtIHRoZSBjdXJyZW50IGRhdGUgb3IKCSAgICAgICAgICAgRGF0ZVsyXSAt IHRoZSBjdXJyZW50IGRhdGVzIGZvciBhIHJhbmdlICovCglfZ2V0RGF0ZURhdGVw aWNrZXI6IGZ1bmN0aW9uKHRhcmdldCkgewoJCXZhciBpbnN0ID0gdGhpcy5fZ2V0 SW5zdCh0YXJnZXQpOwoJCWlmIChpbnN0ICYmICFpbnN0LmlubGluZSkKCQkJdGhp cy5fc2V0RGF0ZUZyb21GaWVsZChpbnN0KTsKCQlyZXR1cm4gKGluc3QgPyB0aGlz Ll9nZXREYXRlKGluc3QpIDogbnVsbCk7Cgl9LAoKCS8qIEhhbmRsZSBrZXlzdHJv a2VzLiAqLwoJX2RvS2V5RG93bjogZnVuY3Rpb24oZXZlbnQpIHsKCQl2YXIgaW5z dCA9ICQuZGF0ZXBpY2tlci5fZ2V0SW5zdChldmVudC50YXJnZXQpOwoJCXZhciBo YW5kbGVkID0gdHJ1ZTsKCQl2YXIgaXNSVEwgPSBpbnN0LmRwRGl2LmlzKCcudWkt ZGF0ZXBpY2tlci1ydGwnKTsKCQlpbnN0Ll9rZXlFdmVudCA9IHRydWU7CgkJaWYg KCQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcpCgkJCXN3aXRjaCAoZXZl bnQua2V5Q29kZSkgewoJCQkJY2FzZSA5OiAgJC5kYXRlcGlja2VyLl9oaWRlRGF0 ZXBpY2tlcihudWxsLCAnJyk7CgkJCQkJCWJyZWFrOyAvLyBoaWRlIG9uIHRhYiBv dXQKCQkJCWNhc2UgMTM6IHZhciBzZWwgPSAkKCd0ZC4nICsgJC5kYXRlcGlja2Vy Ll9kYXlPdmVyQ2xhc3MgKwoJCQkJCQkJJywgdGQuJyArICQuZGF0ZXBpY2tlci5f Y3VycmVudENsYXNzLCBpbnN0LmRwRGl2KTsKCQkJCQkJaWYgKHNlbFswXSkKCQkJ CQkJCSQuZGF0ZXBpY2tlci5fc2VsZWN0RGF5KGV2ZW50LnRhcmdldCwgaW5zdC5z ZWxlY3RlZE1vbnRoLCBpbnN0LnNlbGVjdGVkWWVhciwgc2VsWzBdKTsKCQkJCQkJ ZWxzZQoJCQkJCQkJJC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcihudWxsLCAk LmRhdGVwaWNrZXIuX2dldChpbnN0LCAnZHVyYXRpb24nKSk7CgkJCQkJCXJldHVy biBmYWxzZTsgLy8gZG9uJ3Qgc3VibWl0IHRoZSBmb3JtCgkJCQkJCWJyZWFrOyAv LyBzZWxlY3QgdGhlIHZhbHVlIG9uIGVudGVyCgkJCQljYXNlIDI3OiAkLmRhdGVw aWNrZXIuX2hpZGVEYXRlcGlja2VyKG51bGwsICQuZGF0ZXBpY2tlci5fZ2V0KGlu c3QsICdkdXJhdGlvbicpKTsKCQkJCQkJYnJlYWs7IC8vIGhpZGUgb24gZXNjYXBl CgkJCQljYXNlIDMzOiAkLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZXZlbnQudGFy Z2V0LCAoZXZlbnQuY3RybEtleSA/CgkJCQkJCQktJC5kYXRlcGlja2VyLl9nZXQo aW5zdCwgJ3N0ZXBCaWdNb250aHMnKSA6CgkJCQkJCQktJC5kYXRlcGlja2VyLl9n ZXQoaW5zdCwgJ3N0ZXBNb250aHMnKSksICdNJyk7CgkJCQkJCWJyZWFrOyAvLyBw cmV2aW91cyBtb250aC95ZWFyIG9uIHBhZ2UgdXAvKyBjdHJsCgkJCQljYXNlIDM0 OiAkLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZXZlbnQudGFyZ2V0LCAoZXZlbnQu Y3RybEtleSA/CgkJCQkJCQkrJC5kYXRlcGlja2VyLl9nZXQoaW5zdCwgJ3N0ZXBC aWdNb250aHMnKSA6CgkJCQkJCQkrJC5kYXRlcGlja2VyLl9nZXQoaW5zdCwgJ3N0 ZXBNb250aHMnKSksICdNJyk7CgkJCQkJCWJyZWFrOyAvLyBuZXh0IG1vbnRoL3ll YXIgb24gcGFnZSBkb3duLysgY3RybAoJCQkJY2FzZSAzNTogaWYgKGV2ZW50LmN0 cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJC5kYXRlcGlja2VyLl9jbGVhckRhdGUo ZXZlbnQudGFyZ2V0KTsKCQkJCQkJaGFuZGxlZCA9IGV2ZW50LmN0cmxLZXkgfHwg ZXZlbnQubWV0YUtleTsKCQkJCQkJYnJlYWs7IC8vIGNsZWFyIG9uIGN0cmwgb3Ig Y29tbWFuZCArZW5kCgkJCQljYXNlIDM2OiBpZiAoZXZlbnQuY3RybEtleSB8fCBl dmVudC5tZXRhS2V5KSAkLmRhdGVwaWNrZXIuX2dvdG9Ub2RheShldmVudC50YXJn ZXQpOwoJCQkJCQloYW5kbGVkID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRh S2V5OwoJCQkJCQlicmVhazsgLy8gY3VycmVudCBvbiBjdHJsIG9yIGNvbW1hbmQg K2hvbWUKCQkJCWNhc2UgMzc6IGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1l dGFLZXkpICQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShldmVudC50YXJnZXQsIChp c1JUTCA/ICsxIDogLTEpLCAnRCcpOwoJCQkJCQloYW5kbGVkID0gZXZlbnQuY3Ry bEtleSB8fCBldmVudC5tZXRhS2V5OwoJCQkJCQkvLyAtMSBkYXkgb24gY3RybCBv ciBjb21tYW5kICtsZWZ0CgkJCQkJCWlmIChldmVudC5vcmlnaW5hbEV2ZW50LmFs dEtleSkgJC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGV2ZW50LnRhcmdldCwgKGV2 ZW50LmN0cmxLZXkgPwoJCQkJCQkJCQktJC5kYXRlcGlja2VyLl9nZXQoaW5zdCwg J3N0ZXBCaWdNb250aHMnKSA6CgkJCQkJCQkJCS0kLmRhdGVwaWNrZXIuX2dldChp bnN0LCAnc3RlcE1vbnRocycpKSwgJ00nKTsKCQkJCQkJLy8gbmV4dCBtb250aC95 ZWFyIG9uIGFsdCArbGVmdCBvbiBNYWMKCQkJCQkJYnJlYWs7CgkJCQljYXNlIDM4 OiBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAkLmRhdGVwaWNr ZXIuX2FkanVzdERhdGUoZXZlbnQudGFyZ2V0LCAtNywgJ0QnKTsKCQkJCQkJaGFu ZGxlZCA9IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleTsKCQkJCQkJYnJl YWs7IC8vIC0xIHdlZWsgb24gY3RybCBvciBjb21tYW5kICt1cAoJCQkJY2FzZSAz OTogaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJC5kYXRlcGlj a2VyLl9hZGp1c3REYXRlKGV2ZW50LnRhcmdldCwgKGlzUlRMID8gLTEgOiArMSks ICdEJyk7CgkJCQkJCWhhbmRsZWQgPSBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1l dGFLZXk7CgkJCQkJCS8vICsxIGRheSBvbiBjdHJsIG9yIGNvbW1hbmQgK3JpZ2h0 CgkJCQkJCWlmIChldmVudC5vcmlnaW5hbEV2ZW50LmFsdEtleSkgJC5kYXRlcGlj a2VyLl9hZGp1c3REYXRlKGV2ZW50LnRhcmdldCwgKGV2ZW50LmN0cmxLZXkgPwoJ CQkJCQkJCQkrJC5kYXRlcGlja2VyLl9nZXQoaW5zdCwgJ3N0ZXBCaWdNb250aHMn KSA6CgkJCQkJCQkJCSskLmRhdGVwaWNrZXIuX2dldChpbnN0LCAnc3RlcE1vbnRo cycpKSwgJ00nKTsKCQkJCQkJLy8gbmV4dCBtb250aC95ZWFyIG9uIGFsdCArcmln aHQKCQkJCQkJYnJlYWs7CgkJCQljYXNlIDQwOiBpZiAoZXZlbnQuY3RybEtleSB8 fCBldmVudC5tZXRhS2V5KSAkLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZXZlbnQu dGFyZ2V0LCArNywgJ0QnKTsKCQkJCQkJaGFuZGxlZCA9IGV2ZW50LmN0cmxLZXkg fHwgZXZlbnQubWV0YUtleTsKCQkJCQkJYnJlYWs7IC8vICsxIHdlZWsgb24gY3Ry bCBvciBjb21tYW5kICtkb3duCgkJCQlkZWZhdWx0OiBoYW5kbGVkID0gZmFsc2U7 CgkJCX0KCQllbHNlIGlmIChldmVudC5rZXlDb2RlID09IDM2ICYmIGV2ZW50LmN0 cmxLZXkpIC8vIGRpc3BsYXkgdGhlIGRhdGUgcGlja2VyIG9uIGN0cmwraG9tZQoJ CQkkLmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKHRoaXMpOwoJCWVsc2UgewoJ CQloYW5kbGVkID0gZmFsc2U7CgkJfQoJCWlmIChoYW5kbGVkKSB7CgkJCWV2ZW50 LnByZXZlbnREZWZhdWx0KCk7CgkJCWV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwoJ CX0KCX0sCgoJLyogRmlsdGVyIGVudGVyZWQgY2hhcmFjdGVycyAtIGJhc2VkIG9u IGRhdGUgZm9ybWF0LiAqLwoJX2RvS2V5UHJlc3M6IGZ1bmN0aW9uKGV2ZW50KSB7 CgkJdmFyIGluc3QgPSAkLmRhdGVwaWNrZXIuX2dldEluc3QoZXZlbnQudGFyZ2V0 KTsKCQlpZiAoJC5kYXRlcGlja2VyLl9nZXQoaW5zdCwgJ2NvbnN0cmFpbklucHV0 JykpIHsKCQkJdmFyIGNoYXJzID0gJC5kYXRlcGlja2VyLl9wb3NzaWJsZUNoYXJz KCQuZGF0ZXBpY2tlci5fZ2V0KGluc3QsICdkYXRlRm9ybWF0JykpOwoJCQl2YXIg Y2hyID0gU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSA9PSB1bmRl ZmluZWQgPyBldmVudC5rZXlDb2RlIDogZXZlbnQuY2hhckNvZGUpOwoJCQlyZXR1 cm4gZXZlbnQuY3RybEtleSB8fCAoY2hyIDwgJyAnIHx8ICFjaGFycyB8fCBjaGFy cy5pbmRleE9mKGNocikgPiAtMSk7CgkJfQoJfSwKCgkvKiBQb3AtdXAgdGhlIGRh dGUgcGlja2VyIGZvciBhIGdpdmVuIGlucHV0IGZpZWxkLgoJICAgQHBhcmFtICBp bnB1dCAgZWxlbWVudCAtIHRoZSBpbnB1dCBmaWVsZCBhdHRhY2hlZCB0byB0aGUg ZGF0ZSBwaWNrZXIgb3IKCSAgICAgICAgICAgICAgICAgIGV2ZW50IC0gaWYgdHJp Z2dlcmVkIGJ5IGZvY3VzICovCglfc2hvd0RhdGVwaWNrZXI6IGZ1bmN0aW9uKGlu cHV0KSB7CgkJaW5wdXQgPSBpbnB1dC50YXJnZXQgfHwgaW5wdXQ7CgkJaWYgKGlu cHV0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT0gJ2lucHV0JykgLy8gZmluZCBm cm9tIGJ1dHRvbi9pbWFnZSB0cmlnZ2VyCgkJCWlucHV0ID0gJCgnaW5wdXQnLCBp bnB1dC5wYXJlbnROb2RlKVswXTsKCQlpZiAoJC5kYXRlcGlja2VyLl9pc0Rpc2Fi bGVkRGF0ZXBpY2tlcihpbnB1dCkgfHwgJC5kYXRlcGlja2VyLl9sYXN0SW5wdXQg PT0gaW5wdXQpIC8vIGFscmVhZHkgaGVyZQoJCQlyZXR1cm47CgkJdmFyIGluc3Qg PSAkLmRhdGVwaWNrZXIuX2dldEluc3QoaW5wdXQpOwoJCXZhciBiZWZvcmVTaG93 ID0gJC5kYXRlcGlja2VyLl9nZXQoaW5zdCwgJ2JlZm9yZVNob3cnKTsKCQlleHRl bmRSZW1vdmUoaW5zdC5zZXR0aW5ncywgKGJlZm9yZVNob3cgPyBiZWZvcmVTaG93 LmFwcGx5KGlucHV0LCBbaW5wdXQsIGluc3RdKSA6IHt9KSk7CgkJJC5kYXRlcGlj a2VyLl9oaWRlRGF0ZXBpY2tlcihudWxsLCAnJyk7CgkJJC5kYXRlcGlja2VyLl9s YXN0SW5wdXQgPSBpbnB1dDsKCQkkLmRhdGVwaWNrZXIuX3NldERhdGVGcm9tRmll bGQoaW5zdCk7CgkJaWYgKCQuZGF0ZXBpY2tlci5faW5EaWFsb2cpIC8vIGhpZGUg Y3Vyc29yCgkJCWlucHV0LnZhbHVlID0gJyc7CgkJaWYgKCEkLmRhdGVwaWNrZXIu X3BvcykgeyAvLyBwb3NpdGlvbiBiZWxvdyBpbnB1dAoJCQkkLmRhdGVwaWNrZXIu X3BvcyA9ICQuZGF0ZXBpY2tlci5fZmluZFBvcyhpbnB1dCk7CgkJCSQuZGF0ZXBp Y2tlci5fcG9zWzFdICs9IGlucHV0Lm9mZnNldEhlaWdodDsgLy8gYWRkIHRoZSBo ZWlnaHQKCQl9CgkJdmFyIGlzRml4ZWQgPSBmYWxzZTsKCQkkKGlucHV0KS5wYXJl bnRzKCkuZWFjaChmdW5jdGlvbigpIHsKCQkJaXNGaXhlZCB8PSAkKHRoaXMpLmNz cygncG9zaXRpb24nKSA9PSAnZml4ZWQnOwoJCQlyZXR1cm4gIWlzRml4ZWQ7CgkJ fSk7CgkJaWYgKGlzRml4ZWQgJiYgJC5icm93c2VyLm9wZXJhKSB7IC8vIGNvcnJl Y3Rpb24gZm9yIE9wZXJhIHdoZW4gZml4ZWQgYW5kIHNjcm9sbGVkCgkJCSQuZGF0 ZXBpY2tlci5fcG9zWzBdIC09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3Jv bGxMZWZ0OwoJCQkkLmRhdGVwaWNrZXIuX3Bvc1sxXSAtPSBkb2N1bWVudC5kb2N1 bWVudEVsZW1lbnQuc2Nyb2xsVG9wOwoJCX0KCQl2YXIgb2Zmc2V0ID0ge2xlZnQ6 ICQuZGF0ZXBpY2tlci5fcG9zWzBdLCB0b3A6ICQuZGF0ZXBpY2tlci5fcG9zWzFd fTsKCQkkLmRhdGVwaWNrZXIuX3BvcyA9IG51bGw7CgkJaW5zdC5yYW5nZVN0YXJ0 ID0gbnVsbDsKCQkvLyBkZXRlcm1pbmUgc2l6aW5nIG9mZnNjcmVlbgoJCWluc3Qu ZHBEaXYuY3NzKHtwb3NpdGlvbjogJ2Fic29sdXRlJywgZGlzcGxheTogJ2Jsb2Nr JywgdG9wOiAnLTEwMDBweCd9KTsKCQkkLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVw aWNrZXIoaW5zdCk7CgkJLy8gZml4IHdpZHRoIGZvciBkeW5hbWljIG51bWJlciBv ZiBkYXRlIHBpY2tlcnMKCQkvLyBhbmQgYWRqdXN0IHBvc2l0aW9uIGJlZm9yZSBz aG93aW5nCgkJb2Zmc2V0ID0gJC5kYXRlcGlja2VyLl9jaGVja09mZnNldChpbnN0 LCBvZmZzZXQsIGlzRml4ZWQpOwoJCWluc3QuZHBEaXYuY3NzKHtwb3NpdGlvbjog KCQuZGF0ZXBpY2tlci5faW5EaWFsb2cgJiYgJC5ibG9ja1VJID8KCQkJJ3N0YXRp YycgOiAoaXNGaXhlZCA/ICdmaXhlZCcgOiAnYWJzb2x1dGUnKSksIGRpc3BsYXk6 ICdub25lJywKCQkJbGVmdDogb2Zmc2V0LmxlZnQgKyAncHgnLCB0b3A6IG9mZnNl dC50b3AgKyAncHgnfSk7CgkJaWYgKCFpbnN0LmlubGluZSkgewoJCQl2YXIgc2hv d0FuaW0gPSAkLmRhdGVwaWNrZXIuX2dldChpbnN0LCAnc2hvd0FuaW0nKSB8fCAn c2hvdyc7CgkJCXZhciBkdXJhdGlvbiA9ICQuZGF0ZXBpY2tlci5fZ2V0KGluc3Qs ICdkdXJhdGlvbicpOwoJCQl2YXIgcG9zdFByb2Nlc3MgPSBmdW5jdGlvbigpIHsK CQkJCSQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcgPSB0cnVlOwoJCQkJ aWYgKCQuYnJvd3Nlci5tc2llICYmIHBhcnNlSW50KCQuYnJvd3Nlci52ZXJzaW9u LDEwKSA8IDcpIC8vIGZpeCBJRSA8IDcgc2VsZWN0IHByb2JsZW1zCgkJCQkJJCgn aWZyYW1lLnVpLWRhdGVwaWNrZXItY292ZXInKS5jc3Moe3dpZHRoOiBpbnN0LmRw RGl2LndpZHRoKCkgKyA0LAoJCQkJCQloZWlnaHQ6IGluc3QuZHBEaXYuaGVpZ2h0 KCkgKyA0fSk7CgkJCX07CgkJCWlmICgkLmVmZmVjdHMgJiYgJC5lZmZlY3RzW3No b3dBbmltXSkKCQkJCWluc3QuZHBEaXYuc2hvdyhzaG93QW5pbSwgJC5kYXRlcGlj a2VyLl9nZXQoaW5zdCwgJ3Nob3dPcHRpb25zJyksIGR1cmF0aW9uLCBwb3N0UHJv Y2Vzcyk7CgkJCWVsc2UKCQkJCWluc3QuZHBEaXZbc2hvd0FuaW1dKGR1cmF0aW9u LCBwb3N0UHJvY2Vzcyk7CgkJCWlmIChkdXJhdGlvbiA9PSAnJykKCQkJCXBvc3RQ cm9jZXNzKCk7CgkJCWlmIChpbnN0LmlucHV0WzBdLnR5cGUgIT0gJ2hpZGRlbicp CgkJCQlpbnN0LmlucHV0WzBdLmZvY3VzKCk7CgkJCSQuZGF0ZXBpY2tlci5fY3Vy SW5zdCA9IGluc3Q7CgkJfQoJfSwKCgkvKiBHZW5lcmF0ZSB0aGUgZGF0ZSBwaWNr ZXIgY29udGVudC4gKi8KCV91cGRhdGVEYXRlcGlja2VyOiBmdW5jdGlvbihpbnN0 KSB7CgkJdmFyIGRpbXMgPSB7d2lkdGg6IGluc3QuZHBEaXYud2lkdGgoKSArIDQs CgkJCWhlaWdodDogaW5zdC5kcERpdi5oZWlnaHQoKSArIDR9OwoJCXZhciBzZWxm ID0gdGhpczsKCQlpbnN0LmRwRGl2LmVtcHR5KCkuYXBwZW5kKHRoaXMuX2dlbmVy YXRlSFRNTChpbnN0KSkKCQkJLmZpbmQoJ2lmcmFtZS51aS1kYXRlcGlja2VyLWNv dmVyJykuCgkJCQljc3Moe3dpZHRoOiBkaW1zLndpZHRoLCBoZWlnaHQ6IGRpbXMu aGVpZ2h0fSkKCQkJLmVuZCgpCgkJCS5maW5kKCdidXR0b24sIC51aS1kYXRlcGlj a2VyLXByZXYsIC51aS1kYXRlcGlja2VyLW5leHQsIC51aS1kYXRlcGlja2VyLWNh bGVuZGFyIHRkIGEnKQoJCQkJLmJpbmQoJ21vdXNlb3V0JywgZnVuY3Rpb24oKXsK CQkJCQkkKHRoaXMpLnJlbW92ZUNsYXNzKCd1aS1zdGF0ZS1ob3ZlcicpOwoJCQkJ CWlmKHRoaXMuY2xhc3NOYW1lLmluZGV4T2YoJ3VpLWRhdGVwaWNrZXItcHJldicp ICE9IC0xKSAkKHRoaXMpLnJlbW92ZUNsYXNzKCd1aS1kYXRlcGlja2VyLXByZXYt aG92ZXInKTsKCQkJCQlpZih0aGlzLmNsYXNzTmFtZS5pbmRleE9mKCd1aS1kYXRl cGlja2VyLW5leHQnKSAhPSAtMSkgJCh0aGlzKS5yZW1vdmVDbGFzcygndWktZGF0 ZXBpY2tlci1uZXh0LWhvdmVyJyk7CgkJCQl9KQoJCQkJLmJpbmQoJ21vdXNlb3Zl cicsIGZ1bmN0aW9uKCl7CgkJCQkJaWYgKCFzZWxmLl9pc0Rpc2FibGVkRGF0ZXBp Y2tlciggaW5zdC5pbmxpbmUgPyBpbnN0LmRwRGl2LnBhcmVudCgpWzBdIDogaW5z dC5pbnB1dFswXSkpIHsKCQkJCQkJJCh0aGlzKS5wYXJlbnRzKCcudWktZGF0ZXBp Y2tlci1jYWxlbmRhcicpLmZpbmQoJ2EnKS5yZW1vdmVDbGFzcygndWktc3RhdGUt aG92ZXInKTsKCQkJCQkJJCh0aGlzKS5hZGRDbGFzcygndWktc3RhdGUtaG92ZXIn KTsKCQkJCQkJaWYodGhpcy5jbGFzc05hbWUuaW5kZXhPZigndWktZGF0ZXBpY2tl ci1wcmV2JykgIT0gLTEpICQodGhpcykuYWRkQ2xhc3MoJ3VpLWRhdGVwaWNrZXIt cHJldi1ob3ZlcicpOwoJCQkJCQlpZih0aGlzLmNsYXNzTmFtZS5pbmRleE9mKCd1 aS1kYXRlcGlja2VyLW5leHQnKSAhPSAtMSkgJCh0aGlzKS5hZGRDbGFzcygndWkt ZGF0ZXBpY2tlci1uZXh0LWhvdmVyJyk7CgkJCQkJfQoJCQkJfSkKCQkJLmVuZCgp CgkJCS5maW5kKCcuJyArIHRoaXMuX2RheU92ZXJDbGFzcyArICcgYScpCgkJCQku dHJpZ2dlcignbW91c2VvdmVyJykKCQkJLmVuZCgpOwoJCXZhciBudW1Nb250aHMg PSB0aGlzLl9nZXROdW1iZXJPZk1vbnRocyhpbnN0KTsKCQl2YXIgY29scyA9IG51 bU1vbnRoc1sxXTsKCQl2YXIgd2lkdGggPSAxNzsKCQlpZiAoY29scyA+IDEpIHsK CQkJaW5zdC5kcERpdi5hZGRDbGFzcygndWktZGF0ZXBpY2tlci1tdWx0aS0nICsg Y29scykuY3NzKCd3aWR0aCcsICh3aWR0aCAqIGNvbHMpICsgJ2VtJyk7CgkJfSBl bHNlIHsKCQkJaW5zdC5kcERpdi5yZW1vdmVDbGFzcygndWktZGF0ZXBpY2tlci1t dWx0aS0yIHVpLWRhdGVwaWNrZXItbXVsdGktMyB1aS1kYXRlcGlja2VyLW11bHRp LTQnKS53aWR0aCgnJyk7CgkJfQoJCWluc3QuZHBEaXZbKG51bU1vbnRoc1swXSAh PSAxIHx8IG51bU1vbnRoc1sxXSAhPSAxID8gJ2FkZCcgOiAncmVtb3ZlJykgKwoJ CQknQ2xhc3MnXSgndWktZGF0ZXBpY2tlci1tdWx0aScpOwoJCWluc3QuZHBEaXZb KHRoaXMuX2dldChpbnN0LCAnaXNSVEwnKSA/ICdhZGQnIDogJ3JlbW92ZScpICsK CQkJJ0NsYXNzJ10oJ3VpLWRhdGVwaWNrZXItcnRsJyk7CgkJaWYgKGluc3QuaW5w dXQgJiYgaW5zdC5pbnB1dFswXS50eXBlICE9ICdoaWRkZW4nICYmIGluc3QgPT0g JC5kYXRlcGlja2VyLl9jdXJJbnN0KQoJCQkkKGluc3QuaW5wdXRbMF0pLmZvY3Vz KCk7Cgl9LAoKCS8qIENoZWNrIHBvc2l0aW9uaW5nIHRvIHJlbWFpbiBvbiBzY3Jl ZW4uICovCglfY2hlY2tPZmZzZXQ6IGZ1bmN0aW9uKGluc3QsIG9mZnNldCwgaXNG aXhlZCkgewoJCXZhciBkcFdpZHRoID0gaW5zdC5kcERpdi5vdXRlcldpZHRoKCk7 CgkJdmFyIGRwSGVpZ2h0ID0gaW5zdC5kcERpdi5vdXRlckhlaWdodCgpOwoJCXZh ciBpbnB1dFdpZHRoID0gaW5zdC5pbnB1dCA/IGluc3QuaW5wdXQub3V0ZXJXaWR0 aCgpIDogMDsKCQl2YXIgaW5wdXRIZWlnaHQgPSBpbnN0LmlucHV0ID8gaW5zdC5p bnB1dC5vdXRlckhlaWdodCgpIDogMDsKCQl2YXIgdmlld1dpZHRoID0gKHdpbmRv dy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRX aWR0aCB8fCBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoKSArICQoZG9jdW1lbnQp LnNjcm9sbExlZnQoKTsKCQl2YXIgdmlld0hlaWdodCA9ICh3aW5kb3cuaW5uZXJI ZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCB8 fCBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCkgKyAkKGRvY3VtZW50KS5zY3Jv bGxUb3AoKTsKCgkJb2Zmc2V0LmxlZnQgLT0gKHRoaXMuX2dldChpbnN0LCAnaXNS VEwnKSA/IChkcFdpZHRoIC0gaW5wdXRXaWR0aCkgOiAwKTsKCQlvZmZzZXQubGVm dCAtPSAoaXNGaXhlZCAmJiBvZmZzZXQubGVmdCA9PSBpbnN0LmlucHV0Lm9mZnNl dCgpLmxlZnQpID8gJChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpIDogMDsKCQlvZmZz ZXQudG9wIC09IChpc0ZpeGVkICYmIG9mZnNldC50b3AgPT0gKGluc3QuaW5wdXQu b2Zmc2V0KCkudG9wICsgaW5wdXRIZWlnaHQpKSA/ICQoZG9jdW1lbnQpLnNjcm9s bFRvcCgpIDogMDsKCgkJLy8gbm93IGNoZWNrIGlmIGRhdGVwaWNrZXIgaXMgc2hv d2luZyBvdXRzaWRlIHdpbmRvdyB2aWV3cG9ydCAtIG1vdmUgdG8gYSBiZXR0ZXIg cGxhY2UgaWYgc28uCgkJb2Zmc2V0LmxlZnQgLT0gKG9mZnNldC5sZWZ0ICsgZHBX aWR0aCA+IHZpZXdXaWR0aCAmJiB2aWV3V2lkdGggPiBkcFdpZHRoKSA/IE1hdGgu YWJzKG9mZnNldC5sZWZ0ICsgZHBXaWR0aCAtIHZpZXdXaWR0aCkgOiAwOwoJCW9m ZnNldC50b3AgLT0gKG9mZnNldC50b3AgKyBkcEhlaWdodCA+IHZpZXdIZWlnaHQg JiYgdmlld0hlaWdodCA+IGRwSGVpZ2h0KSA/IE1hdGguYWJzKG9mZnNldC50b3Ag KyBkcEhlaWdodCArIGlucHV0SGVpZ2h0KjIgLSB2aWV3SGVpZ2h0KSA6IDA7CgoJ CXJldHVybiBvZmZzZXQ7Cgl9LAoKCS8qIEZpbmQgYW4gb2JqZWN0J3MgcG9zaXRp b24gb24gdGhlIHNjcmVlbi4gKi8KCV9maW5kUG9zOiBmdW5jdGlvbihvYmopIHsK ICAgICAgICB3aGlsZSAob2JqICYmIChvYmoudHlwZSA9PSAnaGlkZGVuJyB8fCBv Ymoubm9kZVR5cGUgIT0gMSkpIHsKICAgICAgICAgICAgb2JqID0gb2JqLm5leHRT aWJsaW5nOwogICAgICAgIH0KICAgICAgICB2YXIgcG9zaXRpb24gPSAkKG9iaiku b2Zmc2V0KCk7CgkgICAgcmV0dXJuIFtwb3NpdGlvbi5sZWZ0LCBwb3NpdGlvbi50 b3BdOwoJfSwKCgkvKiBIaWRlIHRoZSBkYXRlIHBpY2tlciBmcm9tIHZpZXcuCgkg ICBAcGFyYW0gIGlucHV0ICBlbGVtZW50IC0gdGhlIGlucHV0IGZpZWxkIGF0dGFj aGVkIHRvIHRoZSBkYXRlIHBpY2tlcgoJICAgQHBhcmFtICBkdXJhdGlvbiAgc3Ry aW5nIC0gdGhlIGR1cmF0aW9uIG92ZXIgd2hpY2ggdG8gY2xvc2UgdGhlIGRhdGUg cGlja2VyICovCglfaGlkZURhdGVwaWNrZXI6IGZ1bmN0aW9uKGlucHV0LCBkdXJh dGlvbikgewoJCXZhciBpbnN0ID0gdGhpcy5fY3VySW5zdDsKCQlpZiAoIWluc3Qg fHwgKGlucHV0ICYmIGluc3QgIT0gJC5kYXRhKGlucHV0LCBQUk9QX05BTUUpKSkK CQkJcmV0dXJuOwoJCWlmIChpbnN0LnN0YXlPcGVuKQoJCQl0aGlzLl9zZWxlY3RE YXRlKCcjJyArIGluc3QuaWQsIHRoaXMuX2Zvcm1hdERhdGUoaW5zdCwKCQkJCWlu c3QuY3VycmVudERheSwgaW5zdC5jdXJyZW50TW9udGgsIGluc3QuY3VycmVudFll YXIpKTsKCQlpbnN0LnN0YXlPcGVuID0gZmFsc2U7CgkJaWYgKHRoaXMuX2RhdGVw aWNrZXJTaG93aW5nKSB7CgkJCWR1cmF0aW9uID0gKGR1cmF0aW9uICE9IG51bGwg PyBkdXJhdGlvbiA6IHRoaXMuX2dldChpbnN0LCAnZHVyYXRpb24nKSk7CgkJCXZh ciBzaG93QW5pbSA9IHRoaXMuX2dldChpbnN0LCAnc2hvd0FuaW0nKTsKCQkJdmFy IHBvc3RQcm9jZXNzID0gZnVuY3Rpb24oKSB7CgkJCQkkLmRhdGVwaWNrZXIuX3Rp ZHlEaWFsb2coaW5zdCk7CgkJCX07CgkJCWlmIChkdXJhdGlvbiAhPSAnJyAmJiAk LmVmZmVjdHMgJiYgJC5lZmZlY3RzW3Nob3dBbmltXSkKCQkJCWluc3QuZHBEaXYu aGlkZShzaG93QW5pbSwgJC5kYXRlcGlja2VyLl9nZXQoaW5zdCwgJ3Nob3dPcHRp b25zJyksCgkJCQkJZHVyYXRpb24sIHBvc3RQcm9jZXNzKTsKCQkJZWxzZQoJCQkJ aW5zdC5kcERpdlsoZHVyYXRpb24gPT0gJycgPyAnaGlkZScgOiAoc2hvd0FuaW0g PT0gJ3NsaWRlRG93bicgPyAnc2xpZGVVcCcgOgoJCQkJCShzaG93QW5pbSA9PSAn ZmFkZUluJyA/ICdmYWRlT3V0JyA6ICdoaWRlJykpKV0oZHVyYXRpb24sIHBvc3RQ cm9jZXNzKTsKCQkJaWYgKGR1cmF0aW9uID09ICcnKQoJCQkJdGhpcy5fdGlkeURp YWxvZyhpbnN0KTsKCQkJdmFyIG9uQ2xvc2UgPSB0aGlzLl9nZXQoaW5zdCwgJ29u Q2xvc2UnKTsKCQkJaWYgKG9uQ2xvc2UpCgkJCQlvbkNsb3NlLmFwcGx5KChpbnN0 LmlucHV0ID8gaW5zdC5pbnB1dFswXSA6IG51bGwpLAoJCQkJCVsoaW5zdC5pbnB1 dCA/IGluc3QuaW5wdXQudmFsKCkgOiAnJyksIGluc3RdKTsgIC8vIHRyaWdnZXIg Y3VzdG9tIGNhbGxiYWNrCgkJCXRoaXMuX2RhdGVwaWNrZXJTaG93aW5nID0gZmFs c2U7CgkJCXRoaXMuX2xhc3RJbnB1dCA9IG51bGw7CgkJCWlmICh0aGlzLl9pbkRp YWxvZykgewoJCQkJdGhpcy5fZGlhbG9nSW5wdXQuY3NzKHsgcG9zaXRpb246ICdh YnNvbHV0ZScsIGxlZnQ6ICcwJywgdG9wOiAnLTEwMHB4JyB9KTsKCQkJCWlmICgk LmJsb2NrVUkpIHsKCQkJCQkkLnVuYmxvY2tVSSgpOwoJCQkJCSQoJ2JvZHknKS5h cHBlbmQodGhpcy5kcERpdik7CgkJCQl9CgkJCX0KCQkJdGhpcy5faW5EaWFsb2cg PSBmYWxzZTsKCQl9CgkJdGhpcy5fY3VySW5zdCA9IG51bGw7Cgl9LAoKCS8qIFRp ZHkgdXAgYWZ0ZXIgYSBkaWFsb2cgZGlzcGxheS4gKi8KCV90aWR5RGlhbG9nOiBm dW5jdGlvbihpbnN0KSB7CgkJaW5zdC5kcERpdi5yZW1vdmVDbGFzcyh0aGlzLl9k aWFsb2dDbGFzcykudW5iaW5kKCcudWktZGF0ZXBpY2tlci1jYWxlbmRhcicpOwoJ fSwKCgkvKiBDbG9zZSBkYXRlIHBpY2tlciBpZiBjbGlja2VkIGVsc2V3aGVyZS4g Ki8KCV9jaGVja0V4dGVybmFsQ2xpY2s6IGZ1bmN0aW9uKGV2ZW50KSB7CgkJaWYg KCEkLmRhdGVwaWNrZXIuX2N1ckluc3QpCgkJCXJldHVybjsKCQl2YXIgJHRhcmdl dCA9ICQoZXZlbnQudGFyZ2V0KTsKCQlpZiAoKCR0YXJnZXQucGFyZW50cygnIycg KyAkLmRhdGVwaWNrZXIuX21haW5EaXZJZCkubGVuZ3RoID09IDApICYmCgkJCQkh JHRhcmdldC5oYXNDbGFzcygkLmRhdGVwaWNrZXIubWFya2VyQ2xhc3NOYW1lKSAm JgoJCQkJISR0YXJnZXQuaGFzQ2xhc3MoJC5kYXRlcGlja2VyLl90cmlnZ2VyQ2xh c3MpICYmCgkJCQkkLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nICYmICEo JC5kYXRlcGlja2VyLl9pbkRpYWxvZyAmJiAkLmJsb2NrVUkpKQoJCQkkLmRhdGVw aWNrZXIuX2hpZGVEYXRlcGlja2VyKG51bGwsICcnKTsKCX0sCgoJLyogQWRqdXN0 IG9uZSBvZiB0aGUgZGF0ZSBzdWItZmllbGRzLiAqLwoJX2FkanVzdERhdGU6IGZ1 bmN0aW9uKGlkLCBvZmZzZXQsIHBlcmlvZCkgewoJCXZhciB0YXJnZXQgPSAkKGlk KTsKCQl2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QodGFyZ2V0WzBdKTsKCQlpZiAo dGhpcy5faXNEaXNhYmxlZERhdGVwaWNrZXIodGFyZ2V0WzBdKSkgewoJCQlyZXR1 cm47CgkJfQoJCXRoaXMuX2FkanVzdEluc3REYXRlKGluc3QsIG9mZnNldCArCgkJ CShwZXJpb2QgPT0gJ00nID8gdGhpcy5fZ2V0KGluc3QsICdzaG93Q3VycmVudEF0 UG9zJykgOiAwKSwgLy8gdW5kbyBwb3NpdGlvbmluZwoJCQlwZXJpb2QpOwoJCXRo aXMuX3VwZGF0ZURhdGVwaWNrZXIoaW5zdCk7Cgl9LAoKCS8qIEFjdGlvbiBmb3Ig Y3VycmVudCBsaW5rLiAqLwoJX2dvdG9Ub2RheTogZnVuY3Rpb24oaWQpIHsKCQl2 YXIgdGFyZ2V0ID0gJChpZCk7CgkJdmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KHRh cmdldFswXSk7CgkJaWYgKHRoaXMuX2dldChpbnN0LCAnZ290b0N1cnJlbnQnKSAm JiBpbnN0LmN1cnJlbnREYXkpIHsKCQkJaW5zdC5zZWxlY3RlZERheSA9IGluc3Qu Y3VycmVudERheTsKCQkJaW5zdC5kcmF3TW9udGggPSBpbnN0LnNlbGVjdGVkTW9u dGggPSBpbnN0LmN1cnJlbnRNb250aDsKCQkJaW5zdC5kcmF3WWVhciA9IGluc3Qu c2VsZWN0ZWRZZWFyID0gaW5zdC5jdXJyZW50WWVhcjsKCQl9CgkJZWxzZSB7CgkJ dmFyIGRhdGUgPSBuZXcgRGF0ZSgpOwoJCWluc3Quc2VsZWN0ZWREYXkgPSBkYXRl LmdldERhdGUoKTsKCQlpbnN0LmRyYXdNb250aCA9IGluc3Quc2VsZWN0ZWRNb250 aCA9IGRhdGUuZ2V0TW9udGgoKTsKCQlpbnN0LmRyYXdZZWFyID0gaW5zdC5zZWxl Y3RlZFllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7CgkJfQoJCXRoaXMuX25vdGlm eUNoYW5nZShpbnN0KTsKCQl0aGlzLl9hZGp1c3REYXRlKHRhcmdldCk7Cgl9LAoK CS8qIEFjdGlvbiBmb3Igc2VsZWN0aW5nIGEgbmV3IG1vbnRoL3llYXIuICovCglf c2VsZWN0TW9udGhZZWFyOiBmdW5jdGlvbihpZCwgc2VsZWN0LCBwZXJpb2QpIHsK CQl2YXIgdGFyZ2V0ID0gJChpZCk7CgkJdmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0 KHRhcmdldFswXSk7CgkJaW5zdC5fc2VsZWN0aW5nTW9udGhZZWFyID0gZmFsc2U7 CgkJaW5zdFsnc2VsZWN0ZWQnICsgKHBlcmlvZCA9PSAnTScgPyAnTW9udGgnIDog J1llYXInKV0gPQoJCWluc3RbJ2RyYXcnICsgKHBlcmlvZCA9PSAnTScgPyAnTW9u dGgnIDogJ1llYXInKV0gPQoJCQlwYXJzZUludChzZWxlY3Qub3B0aW9uc1tzZWxl Y3Quc2VsZWN0ZWRJbmRleF0udmFsdWUsMTApOwoJCXRoaXMuX25vdGlmeUNoYW5n ZShpbnN0KTsKCQl0aGlzLl9hZGp1c3REYXRlKHRhcmdldCk7Cgl9LAoKCS8qIFJl c3RvcmUgaW5wdXQgZm9jdXMgYWZ0ZXIgbm90IGNoYW5naW5nIG1vbnRoL3llYXIu ICovCglfY2xpY2tNb250aFllYXI6IGZ1bmN0aW9uKGlkKSB7CgkJdmFyIHRhcmdl dCA9ICQoaWQpOwoJCXZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdCh0YXJnZXRbMF0p OwoJCWlmIChpbnN0LmlucHV0ICYmIGluc3QuX3NlbGVjdGluZ01vbnRoWWVhciAm JiAhJC5icm93c2VyLm1zaWUpCgkJCWluc3QuaW5wdXRbMF0uZm9jdXMoKTsKCQlp bnN0Ll9zZWxlY3RpbmdNb250aFllYXIgPSAhaW5zdC5fc2VsZWN0aW5nTW9udGhZ ZWFyOwoJfSwKCgkvKiBBY3Rpb24gZm9yIHNlbGVjdGluZyBhIGRheS4gKi8KCV9z ZWxlY3REYXk6IGZ1bmN0aW9uKGlkLCBtb250aCwgeWVhciwgdGQpIHsKCQl2YXIg dGFyZ2V0ID0gJChpZCk7CgkJaWYgKCQodGQpLmhhc0NsYXNzKHRoaXMuX3Vuc2Vs ZWN0YWJsZUNsYXNzKSB8fCB0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcih0YXJn ZXRbMF0pKSB7CgkJCXJldHVybjsKCQl9CgkJdmFyIGluc3QgPSB0aGlzLl9nZXRJ bnN0KHRhcmdldFswXSk7CgkJaW5zdC5zZWxlY3RlZERheSA9IGluc3QuY3VycmVu dERheSA9ICQoJ2EnLCB0ZCkuaHRtbCgpOwoJCWluc3Quc2VsZWN0ZWRNb250aCA9 IGluc3QuY3VycmVudE1vbnRoID0gbW9udGg7CgkJaW5zdC5zZWxlY3RlZFllYXIg PSBpbnN0LmN1cnJlbnRZZWFyID0geWVhcjsKCQlpZiAoaW5zdC5zdGF5T3Blbikg ewoJCQlpbnN0LmVuZERheSA9IGluc3QuZW5kTW9udGggPSBpbnN0LmVuZFllYXIg PSBudWxsOwoJCX0KCQl0aGlzLl9zZWxlY3REYXRlKGlkLCB0aGlzLl9mb3JtYXRE YXRlKGluc3QsCgkJCWluc3QuY3VycmVudERheSwgaW5zdC5jdXJyZW50TW9udGgs IGluc3QuY3VycmVudFllYXIpKTsKCQlpZiAoaW5zdC5zdGF5T3BlbikgewoJCQlp bnN0LnJhbmdlU3RhcnQgPSB0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdCgKCQkJ CW5ldyBEYXRlKGluc3QuY3VycmVudFllYXIsIGluc3QuY3VycmVudE1vbnRoLCBp bnN0LmN1cnJlbnREYXkpKTsKCQkJdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihpbnN0 KTsKCQl9Cgl9LAoKCS8qIEVyYXNlIHRoZSBpbnB1dCBmaWVsZCBhbmQgaGlkZSB0 aGUgZGF0ZSBwaWNrZXIuICovCglfY2xlYXJEYXRlOiBmdW5jdGlvbihpZCkgewoJ CXZhciB0YXJnZXQgPSAkKGlkKTsKCQl2YXIgaW5zdCA9IHRoaXMuX2dldEluc3Qo dGFyZ2V0WzBdKTsKCQlpbnN0LnN0YXlPcGVuID0gZmFsc2U7CgkJaW5zdC5lbmRE YXkgPSBpbnN0LmVuZE1vbnRoID0gaW5zdC5lbmRZZWFyID0gaW5zdC5yYW5nZVN0 YXJ0ID0gbnVsbDsKCQl0aGlzLl9zZWxlY3REYXRlKHRhcmdldCwgJycpOwoJfSwK CgkvKiBVcGRhdGUgdGhlIGlucHV0IGZpZWxkIHdpdGggdGhlIHNlbGVjdGVkIGRh dGUuICovCglfc2VsZWN0RGF0ZTogZnVuY3Rpb24oaWQsIGRhdGVTdHIpIHsKCQl2 YXIgdGFyZ2V0ID0gJChpZCk7CgkJdmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KHRh cmdldFswXSk7CgkJZGF0ZVN0ciA9IChkYXRlU3RyICE9IG51bGwgPyBkYXRlU3Ry IDogdGhpcy5fZm9ybWF0RGF0ZShpbnN0KSk7CgkJaWYgKGluc3QuaW5wdXQpCgkJ CWluc3QuaW5wdXQudmFsKGRhdGVTdHIpOwoJCXRoaXMuX3VwZGF0ZUFsdGVybmF0 ZShpbnN0KTsKCQl2YXIgb25TZWxlY3QgPSB0aGlzLl9nZXQoaW5zdCwgJ29uU2Vs ZWN0Jyk7CgkJaWYgKG9uU2VsZWN0KQoJCQlvblNlbGVjdC5hcHBseSgoaW5zdC5p bnB1dCA/IGluc3QuaW5wdXRbMF0gOiBudWxsKSwgW2RhdGVTdHIsIGluc3RdKTsg IC8vIHRyaWdnZXIgY3VzdG9tIGNhbGxiYWNrCgkJZWxzZSBpZiAoaW5zdC5pbnB1 dCkKCQkJaW5zdC5pbnB1dC50cmlnZ2VyKCdjaGFuZ2UnKTsgLy8gZmlyZSB0aGUg Y2hhbmdlIGV2ZW50CgkJaWYgKGluc3QuaW5saW5lKQoJCQl0aGlzLl91cGRhdGVE YXRlcGlja2VyKGluc3QpOwoJCWVsc2UgaWYgKCFpbnN0LnN0YXlPcGVuKSB7CgkJ CXRoaXMuX2hpZGVEYXRlcGlja2VyKG51bGwsIHRoaXMuX2dldChpbnN0LCAnZHVy YXRpb24nKSk7CgkJCXRoaXMuX2xhc3RJbnB1dCA9IGluc3QuaW5wdXRbMF07CgkJ CWlmICh0eXBlb2YoaW5zdC5pbnB1dFswXSkgIT0gJ29iamVjdCcpCgkJCQlpbnN0 LmlucHV0WzBdLmZvY3VzKCk7IC8vIHJlc3RvcmUgZm9jdXMKCQkJdGhpcy5fbGFz dElucHV0ID0gbnVsbDsKCQl9Cgl9LAoKCS8qIFVwZGF0ZSBhbnkgYWx0ZXJuYXRl IGZpZWxkIHRvIHN5bmNocm9uaXNlIHdpdGggdGhlIG1haW4gZmllbGQuICovCglf dXBkYXRlQWx0ZXJuYXRlOiBmdW5jdGlvbihpbnN0KSB7CgkJdmFyIGFsdEZpZWxk ID0gdGhpcy5fZ2V0KGluc3QsICdhbHRGaWVsZCcpOwoJCWlmIChhbHRGaWVsZCkg eyAvLyB1cGRhdGUgYWx0ZXJuYXRlIGZpZWxkIHRvbwoJCQl2YXIgYWx0Rm9ybWF0 ID0gdGhpcy5fZ2V0KGluc3QsICdhbHRGb3JtYXQnKSB8fCB0aGlzLl9nZXQoaW5z dCwgJ2RhdGVGb3JtYXQnKTsKCQkJdmFyIGRhdGUgPSB0aGlzLl9nZXREYXRlKGlu c3QpOwoJCQlkYXRlU3RyID0gdGhpcy5mb3JtYXREYXRlKGFsdEZvcm1hdCwgZGF0 ZSwgdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGluc3QpKTsKCQkJJChhbHRGaWVsZCku ZWFjaChmdW5jdGlvbigpIHsgJCh0aGlzKS52YWwoZGF0ZVN0cik7IH0pOwoJCX0K CX0sCgoJLyogU2V0IGFzIGJlZm9yZVNob3dEYXkgZnVuY3Rpb24gdG8gcHJldmVu dCBzZWxlY3Rpb24gb2Ygd2Vla2VuZHMuCgkgICBAcGFyYW0gIGRhdGUgIERhdGUg LSB0aGUgZGF0ZSB0byBjdXN0b21pc2UKCSAgIEByZXR1cm4gW2Jvb2xlYW4sIHN0 cmluZ10gLSBpcyB0aGlzIGRhdGUgc2VsZWN0YWJsZT8sIHdoYXQgaXMgaXRzIENT UyBjbGFzcz8gKi8KCW5vV2Vla2VuZHM6IGZ1bmN0aW9uKGRhdGUpIHsKCQl2YXIg ZGF5ID0gZGF0ZS5nZXREYXkoKTsKCQlyZXR1cm4gWyhkYXkgPiAwICYmIGRheSA8 IDYpLCAnJ107Cgl9LAoKCS8qIFNldCBhcyBjYWxjdWxhdGVXZWVrIHRvIGRldGVy bWluZSB0aGUgd2VlayBvZiB0aGUgeWVhciBiYXNlZCBvbiB0aGUgSVNPIDg2MDEg ZGVmaW5pdGlvbi4KCSAgIEBwYXJhbSAgZGF0ZSAgRGF0ZSAtIHRoZSBkYXRlIHRv IGdldCB0aGUgd2VlayBmb3IKCSAgIEByZXR1cm4gIG51bWJlciAtIHRoZSBudW1i ZXIgb2YgdGhlIHdlZWsgd2l0aGluIHRoZSB5ZWFyIHRoYXQgY29udGFpbnMgdGhp cyBkYXRlICovCglpc284NjAxV2VlazogZnVuY3Rpb24oZGF0ZSkgewoJCXZhciBj aGVja0RhdGUgPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0 TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpOwoJCXZhciBmaXJzdE1vbiA9IG5ldyBE YXRlKGNoZWNrRGF0ZS5nZXRGdWxsWWVhcigpLCAxIC0gMSwgNCk7IC8vIEZpcnN0 IHdlZWsgYWx3YXlzIGNvbnRhaW5zIDQgSmFuCgkJdmFyIGZpcnN0RGF5ID0gZmly c3RNb24uZ2V0RGF5KCkgfHwgNzsgLy8gRGF5IG9mIHdlZWs6IE1vbiA9IDEsIC4u LiwgU3VuID0gNwoJCWZpcnN0TW9uLnNldERhdGUoZmlyc3RNb24uZ2V0RGF0ZSgp ICsgMSAtIGZpcnN0RGF5KTsgLy8gUHJlY2VkaW5nIE1vbmRheQoJCWlmIChmaXJz dERheSA8IDQgJiYgY2hlY2tEYXRlIDwgZmlyc3RNb24pIHsgLy8gQWRqdXN0IGZp cnN0IHRocmVlIGRheXMgaW4geWVhciBpZiBuZWNlc3NhcnkKCQkJY2hlY2tEYXRl LnNldERhdGUoY2hlY2tEYXRlLmdldERhdGUoKSAtIDMpOyAvLyBHZW5lcmF0ZSBm b3IgcHJldmlvdXMgeWVhcgoJCQlyZXR1cm4gJC5kYXRlcGlja2VyLmlzbzg2MDFX ZWVrKGNoZWNrRGF0ZSk7CgkJfSBlbHNlIGlmIChjaGVja0RhdGUgPiBuZXcgRGF0 ZShjaGVja0RhdGUuZ2V0RnVsbFllYXIoKSwgMTIgLSAxLCAyOCkpIHsgLy8gQ2hl Y2sgbGFzdCB0aHJlZSBkYXlzIGluIHllYXIKCQkJZmlyc3REYXkgPSBuZXcgRGF0 ZShjaGVja0RhdGUuZ2V0RnVsbFllYXIoKSArIDEsIDEgLSAxLCA0KS5nZXREYXko KSB8fCA3OwoJCQlpZiAoZmlyc3REYXkgPiA0ICYmIChjaGVja0RhdGUuZ2V0RGF5 KCkgfHwgNykgPCBmaXJzdERheSAtIDMpIHsgLy8gQWRqdXN0IGlmIG5lY2Vzc2Fy eQoJCQkJcmV0dXJuIDE7CgkJCX0KCQl9CgkJcmV0dXJuIE1hdGguZmxvb3IoKChj aGVja0RhdGUgLSBmaXJzdE1vbikgLyA4NjQwMDAwMCkgLyA3KSArIDE7IC8vIFdl ZWtzIHRvIGdpdmVuIGRhdGUKCX0sCgoJLyogUGFyc2UgYSBzdHJpbmcgdmFsdWUg aW50byBhIGRhdGUgb2JqZWN0LgoJICAgU2VlIGZvcm1hdERhdGUgYmVsb3cgZm9y IHRoZSBwb3NzaWJsZSBmb3JtYXRzLgoKCSAgIEBwYXJhbSAgZm9ybWF0ICAgIHN0 cmluZyAtIHRoZSBleHBlY3RlZCBmb3JtYXQgb2YgdGhlIGRhdGUKCSAgIEBwYXJh bSAgdmFsdWUgICAgIHN0cmluZyAtIHRoZSBkYXRlIGluIHRoZSBhYm92ZSBmb3Jt YXQKCSAgIEBwYXJhbSAgc2V0dGluZ3MgIE9iamVjdCAtIGF0dHJpYnV0ZXMgaW5j bHVkZToKCSAgICAgICAgICAgICAgICAgICAgIHNob3J0WWVhckN1dG9mZiAgbnVt YmVyIC0gdGhlIGN1dG9mZiB5ZWFyIGZvciBkZXRlcm1pbmluZyB0aGUgY2VudHVy eSAob3B0aW9uYWwpCgkgICAgICAgICAgICAgICAgICAgICBkYXlOYW1lc1Nob3J0 ICAgIHN0cmluZ1s3XSAtIGFiYnJldmlhdGVkIG5hbWVzIG9mIHRoZSBkYXlzIGZy b20gU3VuZGF5IChvcHRpb25hbCkKCSAgICAgICAgICAgICAgICAgICAgIGRheU5h bWVzICAgICAgICAgc3RyaW5nWzddIC0gbmFtZXMgb2YgdGhlIGRheXMgZnJvbSBT dW5kYXkgKG9wdGlvbmFsKQoJICAgICAgICAgICAgICAgICAgICAgbW9udGhOYW1l c1Nob3J0ICBzdHJpbmdbMTJdIC0gYWJicmV2aWF0ZWQgbmFtZXMgb2YgdGhlIG1v bnRocyAob3B0aW9uYWwpCgkgICAgICAgICAgICAgICAgICAgICBtb250aE5hbWVz ICAgICAgIHN0cmluZ1sxMl0gLSBuYW1lcyBvZiB0aGUgbW9udGhzIChvcHRpb25h bCkKCSAgIEByZXR1cm4gIERhdGUgLSB0aGUgZXh0cmFjdGVkIGRhdGUgdmFsdWUg b3IgbnVsbCBpZiB2YWx1ZSBpcyBibGFuayAqLwoJcGFyc2VEYXRlOiBmdW5jdGlv biAoZm9ybWF0LCB2YWx1ZSwgc2V0dGluZ3MpIHsKCQlpZiAoZm9ybWF0ID09IG51 bGwgfHwgdmFsdWUgPT0gbnVsbCkKCQkJdGhyb3cgJ0ludmFsaWQgYXJndW1lbnRz JzsKCQl2YWx1ZSA9ICh0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcgPyB2YWx1ZS50 b1N0cmluZygpIDogdmFsdWUgKyAnJyk7CgkJaWYgKHZhbHVlID09ICcnKQoJCQly ZXR1cm4gbnVsbDsKCQl2YXIgc2hvcnRZZWFyQ3V0b2ZmID0gKHNldHRpbmdzID8g c2V0dGluZ3Muc2hvcnRZZWFyQ3V0b2ZmIDogbnVsbCkgfHwgdGhpcy5fZGVmYXVs dHMuc2hvcnRZZWFyQ3V0b2ZmOwoJCXZhciBkYXlOYW1lc1Nob3J0ID0gKHNldHRp bmdzID8gc2V0dGluZ3MuZGF5TmFtZXNTaG9ydCA6IG51bGwpIHx8IHRoaXMuX2Rl ZmF1bHRzLmRheU5hbWVzU2hvcnQ7CgkJdmFyIGRheU5hbWVzID0gKHNldHRpbmdz ID8gc2V0dGluZ3MuZGF5TmFtZXMgOiBudWxsKSB8fCB0aGlzLl9kZWZhdWx0cy5k YXlOYW1lczsKCQl2YXIgbW9udGhOYW1lc1Nob3J0ID0gKHNldHRpbmdzID8gc2V0 dGluZ3MubW9udGhOYW1lc1Nob3J0IDogbnVsbCkgfHwgdGhpcy5fZGVmYXVsdHMu bW9udGhOYW1lc1Nob3J0OwoJCXZhciBtb250aE5hbWVzID0gKHNldHRpbmdzID8g c2V0dGluZ3MubW9udGhOYW1lcyA6IG51bGwpIHx8IHRoaXMuX2RlZmF1bHRzLm1v bnRoTmFtZXM7CgkJdmFyIHllYXIgPSAtMTsKCQl2YXIgbW9udGggPSAtMTsKCQl2 YXIgZGF5ID0gLTE7CgkJdmFyIGRveSA9IC0xOwoJCXZhciBsaXRlcmFsID0gZmFs c2U7CgkJLy8gQ2hlY2sgd2hldGhlciBhIGZvcm1hdCBjaGFyYWN0ZXIgaXMgZG91 YmxlZAoJCXZhciBsb29rQWhlYWQgPSBmdW5jdGlvbihtYXRjaCkgewoJCQl2YXIg bWF0Y2hlcyA9IChpRm9ybWF0ICsgMSA8IGZvcm1hdC5sZW5ndGggJiYgZm9ybWF0 LmNoYXJBdChpRm9ybWF0ICsgMSkgPT0gbWF0Y2gpOwoJCQlpZiAobWF0Y2hlcykK CQkJCWlGb3JtYXQrKzsKCQkJcmV0dXJuIG1hdGNoZXM7CgkJfTsKCQkvLyBFeHRy YWN0IGEgbnVtYmVyIGZyb20gdGhlIHN0cmluZyB2YWx1ZQoJCXZhciBnZXROdW1i ZXIgPSBmdW5jdGlvbihtYXRjaCkgewoJCQlsb29rQWhlYWQobWF0Y2gpOwoJCQl2 YXIgb3JpZ1NpemUgPSAobWF0Y2ggPT0gJ0AnID8gMTQgOiAobWF0Y2ggPT0gJ3kn ID8gNCA6IChtYXRjaCA9PSAnbycgPyAzIDogMikpKTsKCQkJdmFyIHNpemUgPSBv cmlnU2l6ZTsKCQkJdmFyIG51bSA9IDA7CgkJCXdoaWxlIChzaXplID4gMCAmJiBp VmFsdWUgPCB2YWx1ZS5sZW5ndGggJiYKCQkJCQl2YWx1ZS5jaGFyQXQoaVZhbHVl KSA+PSAnMCcgJiYgdmFsdWUuY2hhckF0KGlWYWx1ZSkgPD0gJzknKSB7CgkJCQlu dW0gPSBudW0gKiAxMCArIHBhcnNlSW50KHZhbHVlLmNoYXJBdChpVmFsdWUrKyks MTApOwoJCQkJc2l6ZS0tOwoJCQl9CgkJCWlmIChzaXplID09IG9yaWdTaXplKQoJ CQkJdGhyb3cgJ01pc3NpbmcgbnVtYmVyIGF0IHBvc2l0aW9uICcgKyBpVmFsdWU7 CgkJCXJldHVybiBudW07CgkJfTsKCQkvLyBFeHRyYWN0IGEgbmFtZSBmcm9tIHRo ZSBzdHJpbmcgdmFsdWUgYW5kIGNvbnZlcnQgdG8gYW4gaW5kZXgKCQl2YXIgZ2V0 TmFtZSA9IGZ1bmN0aW9uKG1hdGNoLCBzaG9ydE5hbWVzLCBsb25nTmFtZXMpIHsK CQkJdmFyIG5hbWVzID0gKGxvb2tBaGVhZChtYXRjaCkgPyBsb25nTmFtZXMgOiBz aG9ydE5hbWVzKTsKCQkJdmFyIHNpemUgPSAwOwoJCQlmb3IgKHZhciBqID0gMDsg aiA8IG5hbWVzLmxlbmd0aDsgaisrKQoJCQkJc2l6ZSA9IE1hdGgubWF4KHNpemUs IG5hbWVzW2pdLmxlbmd0aCk7CgkJCXZhciBuYW1lID0gJyc7CgkJCXZhciBpSW5p dCA9IGlWYWx1ZTsKCQkJd2hpbGUgKHNpemUgPiAwICYmIGlWYWx1ZSA8IHZhbHVl Lmxlbmd0aCkgewoJCQkJbmFtZSArPSB2YWx1ZS5jaGFyQXQoaVZhbHVlKyspOwoJ CQkJZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykKCQkJCQlp ZiAobmFtZSA9PSBuYW1lc1tpXSkKCQkJCQkJcmV0dXJuIGkgKyAxOwoJCQkJc2l6 ZS0tOwoJCQl9CgkJCXRocm93ICdVbmtub3duIG5hbWUgYXQgcG9zaXRpb24gJyAr IGlJbml0OwoJCX07CgkJLy8gQ29uZmlybSB0aGF0IGEgbGl0ZXJhbCBjaGFyYWN0 ZXIgbWF0Y2hlcyB0aGUgc3RyaW5nIHZhbHVlCgkJdmFyIGNoZWNrTGl0ZXJhbCA9 IGZ1bmN0aW9uKCkgewoJCQlpZiAodmFsdWUuY2hhckF0KGlWYWx1ZSkgIT0gZm9y bWF0LmNoYXJBdChpRm9ybWF0KSkKCQkJCXRocm93ICdVbmV4cGVjdGVkIGxpdGVy YWwgYXQgcG9zaXRpb24gJyArIGlWYWx1ZTsKCQkJaVZhbHVlKys7CgkJfTsKCQl2 YXIgaVZhbHVlID0gMDsKCQlmb3IgKHZhciBpRm9ybWF0ID0gMDsgaUZvcm1hdCA8 IGZvcm1hdC5sZW5ndGg7IGlGb3JtYXQrKykgewoJCQlpZiAobGl0ZXJhbCkKCQkJ CWlmIChmb3JtYXQuY2hhckF0KGlGb3JtYXQpID09ICInIiAmJiAhbG9va0FoZWFk KCInIikpCgkJCQkJbGl0ZXJhbCA9IGZhbHNlOwoJCQkJZWxzZQoJCQkJCWNoZWNr TGl0ZXJhbCgpOwoJCQllbHNlCgkJCQlzd2l0Y2ggKGZvcm1hdC5jaGFyQXQoaUZv cm1hdCkpIHsKCQkJCQljYXNlICdkJzoKCQkJCQkJZGF5ID0gZ2V0TnVtYmVyKCdk Jyk7CgkJCQkJCWJyZWFrOwoJCQkJCWNhc2UgJ0QnOgoJCQkJCQlnZXROYW1lKCdE JywgZGF5TmFtZXNTaG9ydCwgZGF5TmFtZXMpOwoJCQkJCQlicmVhazsKCQkJCQlj YXNlICdvJzoKCQkJCQkJZG95ID0gZ2V0TnVtYmVyKCdvJyk7CgkJCQkJCWJyZWFr OwoJCQkJCWNhc2UgJ20nOgoJCQkJCQltb250aCA9IGdldE51bWJlcignbScpOwoJ CQkJCQlicmVhazsKCQkJCQljYXNlICdNJzoKCQkJCQkJbW9udGggPSBnZXROYW1l KCdNJywgbW9udGhOYW1lc1Nob3J0LCBtb250aE5hbWVzKTsKCQkJCQkJYnJlYWs7 CgkJCQkJY2FzZSAneSc6CgkJCQkJCXllYXIgPSBnZXROdW1iZXIoJ3knKTsKCQkJ CQkJYnJlYWs7CgkJCQkJY2FzZSAnQCc6CgkJCQkJCXZhciBkYXRlID0gbmV3IERh dGUoZ2V0TnVtYmVyKCdAJykpOwoJCQkJCQl5ZWFyID0gZGF0ZS5nZXRGdWxsWWVh cigpOwoJCQkJCQltb250aCA9IGRhdGUuZ2V0TW9udGgoKSArIDE7CgkJCQkJCWRh eSA9IGRhdGUuZ2V0RGF0ZSgpOwoJCQkJCQlicmVhazsKCQkJCQljYXNlICInIjoK CQkJCQkJaWYgKGxvb2tBaGVhZCgiJyIpKQoJCQkJCQkJY2hlY2tMaXRlcmFsKCk7 CgkJCQkJCWVsc2UKCQkJCQkJCWxpdGVyYWwgPSB0cnVlOwoJCQkJCQlicmVhazsK CQkJCQlkZWZhdWx0OgoJCQkJCQljaGVja0xpdGVyYWwoKTsKCQkJCX0KCQl9CgkJ aWYgKHllYXIgPT0gLTEpCgkJCXllYXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFy KCk7CgkJZWxzZSBpZiAoeWVhciA8IDEwMCkKCQkJeWVhciArPSBuZXcgRGF0ZSgp LmdldEZ1bGxZZWFyKCkgLSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkgJSAxMDAg KwoJCQkJKHllYXIgPD0gc2hvcnRZZWFyQ3V0b2ZmID8gMCA6IC0xMDApOwoJCWlm IChkb3kgPiAtMSkgewoJCQltb250aCA9IDE7CgkJCWRheSA9IGRveTsKCQkJZG8g ewoJCQkJdmFyIGRpbSA9IHRoaXMuX2dldERheXNJbk1vbnRoKHllYXIsIG1vbnRo IC0gMSk7CgkJCQlpZiAoZGF5IDw9IGRpbSkKCQkJCQlicmVhazsKCQkJCW1vbnRo Kys7CgkJCQlkYXkgLT0gZGltOwoJCQl9IHdoaWxlICh0cnVlKTsKCQl9CgkJdmFy IGRhdGUgPSB0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh5ZWFy LCBtb250aCAtIDEsIGRheSkpOwoJCWlmIChkYXRlLmdldEZ1bGxZZWFyKCkgIT0g eWVhciB8fCBkYXRlLmdldE1vbnRoKCkgKyAxICE9IG1vbnRoIHx8IGRhdGUuZ2V0 RGF0ZSgpICE9IGRheSkKCQkJdGhyb3cgJ0ludmFsaWQgZGF0ZSc7IC8vIEUuZy4g MzEvMDIvKgoJCXJldHVybiBkYXRlOwoJfSwKCgkvKiBTdGFuZGFyZCBkYXRlIGZv cm1hdHMuICovCglBVE9NOiAneXktbW0tZGQnLCAvLyBSRkMgMzMzOSAoSVNPIDg2 MDEpCglDT09LSUU6ICdELCBkZCBNIHl5JywKCUlTT184NjAxOiAneXktbW0tZGQn LAoJUkZDXzgyMjogJ0QsIGQgTSB5JywKCVJGQ184NTA6ICdERCwgZGQtTS15JywK CVJGQ18xMDM2OiAnRCwgZCBNIHknLAoJUkZDXzExMjM6ICdELCBkIE0geXknLAoJ UkZDXzI4MjI6ICdELCBkIE0geXknLAoJUlNTOiAnRCwgZCBNIHknLCAvLyBSRkMg ODIyCglUSU1FU1RBTVA6ICdAJywKCVczQzogJ3l5LW1tLWRkJywgLy8gSVNPIDg2 MDEKCgkvKiBGb3JtYXQgYSBkYXRlIG9iamVjdCBpbnRvIGEgc3RyaW5nIHZhbHVl LgoJICAgVGhlIGZvcm1hdCBjYW4gYmUgY29tYmluYXRpb25zIG9mIHRoZSBmb2xs b3dpbmc6CgkgICBkICAtIGRheSBvZiBtb250aCAobm8gbGVhZGluZyB6ZXJvKQoJ ICAgZGQgLSBkYXkgb2YgbW9udGggKHR3byBkaWdpdCkKCSAgIG8gIC0gZGF5IG9m IHllYXIgKG5vIGxlYWRpbmcgemVyb3MpCgkgICBvbyAtIGRheSBvZiB5ZWFyICh0 aHJlZSBkaWdpdCkKCSAgIEQgIC0gZGF5IG5hbWUgc2hvcnQKCSAgIEREIC0gZGF5 IG5hbWUgbG9uZwoJICAgbSAgLSBtb250aCBvZiB5ZWFyIChubyBsZWFkaW5nIHpl cm8pCgkgICBtbSAtIG1vbnRoIG9mIHllYXIgKHR3byBkaWdpdCkKCSAgIE0gIC0g bW9udGggbmFtZSBzaG9ydAoJICAgTU0gLSBtb250aCBuYW1lIGxvbmcKCSAgIHkg IC0geWVhciAodHdvIGRpZ2l0KQoJICAgeXkgLSB5ZWFyIChmb3VyIGRpZ2l0KQoJ ICAgQCAtIFVuaXggdGltZXN0YW1wIChtcyBzaW5jZSAwMS8wMS8xOTcwKQoJICAg Jy4uLicgLSBsaXRlcmFsIHRleHQKCSAgICcnIC0gc2luZ2xlIHF1b3RlCgoJICAg QHBhcmFtICBmb3JtYXQgICAgc3RyaW5nIC0gdGhlIGRlc2lyZWQgZm9ybWF0IG9m IHRoZSBkYXRlCgkgICBAcGFyYW0gIGRhdGUgICAgICBEYXRlIC0gdGhlIGRhdGUg dmFsdWUgdG8gZm9ybWF0CgkgICBAcGFyYW0gIHNldHRpbmdzICBPYmplY3QgLSBh dHRyaWJ1dGVzIGluY2x1ZGU6CgkgICAgICAgICAgICAgICAgICAgICBkYXlOYW1l c1Nob3J0ICAgIHN0cmluZ1s3XSAtIGFiYnJldmlhdGVkIG5hbWVzIG9mIHRoZSBk YXlzIGZyb20gU3VuZGF5IChvcHRpb25hbCkKCSAgICAgICAgICAgICAgICAgICAg IGRheU5hbWVzICAgICAgICAgc3RyaW5nWzddIC0gbmFtZXMgb2YgdGhlIGRheXMg ZnJvbSBTdW5kYXkgKG9wdGlvbmFsKQoJICAgICAgICAgICAgICAgICAgICAgbW9u dGhOYW1lc1Nob3J0ICBzdHJpbmdbMTJdIC0gYWJicmV2aWF0ZWQgbmFtZXMgb2Yg dGhlIG1vbnRocyAob3B0aW9uYWwpCgkgICAgICAgICAgICAgICAgICAgICBtb250 aE5hbWVzICAgICAgIHN0cmluZ1sxMl0gLSBuYW1lcyBvZiB0aGUgbW9udGhzIChv cHRpb25hbCkKCSAgIEByZXR1cm4gIHN0cmluZyAtIHRoZSBkYXRlIGluIHRoZSBh Ym92ZSBmb3JtYXQgKi8KCWZvcm1hdERhdGU6IGZ1bmN0aW9uIChmb3JtYXQsIGRh dGUsIHNldHRpbmdzKSB7CgkJaWYgKCFkYXRlKQoJCQlyZXR1cm4gJyc7CgkJdmFy IGRheU5hbWVzU2hvcnQgPSAoc2V0dGluZ3MgPyBzZXR0aW5ncy5kYXlOYW1lc1No b3J0IDogbnVsbCkgfHwgdGhpcy5fZGVmYXVsdHMuZGF5TmFtZXNTaG9ydDsKCQl2 YXIgZGF5TmFtZXMgPSAoc2V0dGluZ3MgPyBzZXR0aW5ncy5kYXlOYW1lcyA6IG51 bGwpIHx8IHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzOwoJCXZhciBtb250aE5hbWVz U2hvcnQgPSAoc2V0dGluZ3MgPyBzZXR0aW5ncy5tb250aE5hbWVzU2hvcnQgOiBu dWxsKSB8fCB0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzU2hvcnQ7CgkJdmFyIG1v bnRoTmFtZXMgPSAoc2V0dGluZ3MgPyBzZXR0aW5ncy5tb250aE5hbWVzIDogbnVs bCkgfHwgdGhpcy5fZGVmYXVsdHMubW9udGhOYW1lczsKCQkvLyBDaGVjayB3aGV0 aGVyIGEgZm9ybWF0IGNoYXJhY3RlciBpcyBkb3VibGVkCgkJdmFyIGxvb2tBaGVh ZCA9IGZ1bmN0aW9uKG1hdGNoKSB7CgkJCXZhciBtYXRjaGVzID0gKGlGb3JtYXQg KyAxIDwgZm9ybWF0Lmxlbmd0aCAmJiBmb3JtYXQuY2hhckF0KGlGb3JtYXQgKyAx KSA9PSBtYXRjaCk7CgkJCWlmIChtYXRjaGVzKQoJCQkJaUZvcm1hdCsrOwoJCQly ZXR1cm4gbWF0Y2hlczsKCQl9OwoJCS8vIEZvcm1hdCBhIG51bWJlciwgd2l0aCBs ZWFkaW5nIHplcm8gaWYgbmVjZXNzYXJ5CgkJdmFyIGZvcm1hdE51bWJlciA9IGZ1 bmN0aW9uKG1hdGNoLCB2YWx1ZSwgbGVuKSB7CgkJCXZhciBudW0gPSAnJyArIHZh bHVlOwoJCQlpZiAobG9va0FoZWFkKG1hdGNoKSkKCQkJCXdoaWxlIChudW0ubGVu Z3RoIDwgbGVuKQoJCQkJCW51bSA9ICcwJyArIG51bTsKCQkJcmV0dXJuIG51bTsK CQl9OwoJCS8vIEZvcm1hdCBhIG5hbWUsIHNob3J0IG9yIGxvbmcgYXMgcmVxdWVz dGVkCgkJdmFyIGZvcm1hdE5hbWUgPSBmdW5jdGlvbihtYXRjaCwgdmFsdWUsIHNo b3J0TmFtZXMsIGxvbmdOYW1lcykgewoJCQlyZXR1cm4gKGxvb2tBaGVhZChtYXRj aCkgPyBsb25nTmFtZXNbdmFsdWVdIDogc2hvcnROYW1lc1t2YWx1ZV0pOwoJCX07 CgkJdmFyIG91dHB1dCA9ICcnOwoJCXZhciBsaXRlcmFsID0gZmFsc2U7CgkJaWYg KGRhdGUpCgkJCWZvciAodmFyIGlGb3JtYXQgPSAwOyBpRm9ybWF0IDwgZm9ybWF0 Lmxlbmd0aDsgaUZvcm1hdCsrKSB7CgkJCQlpZiAobGl0ZXJhbCkKCQkJCQlpZiAo Zm9ybWF0LmNoYXJBdChpRm9ybWF0KSA9PSAiJyIgJiYgIWxvb2tBaGVhZCgiJyIp KQoJCQkJCQlsaXRlcmFsID0gZmFsc2U7CgkJCQkJZWxzZQoJCQkJCQlvdXRwdXQg Kz0gZm9ybWF0LmNoYXJBdChpRm9ybWF0KTsKCQkJCWVsc2UKCQkJCQlzd2l0Y2gg KGZvcm1hdC5jaGFyQXQoaUZvcm1hdCkpIHsKCQkJCQkJY2FzZSAnZCc6CgkJCQkJ CQlvdXRwdXQgKz0gZm9ybWF0TnVtYmVyKCdkJywgZGF0ZS5nZXREYXRlKCksIDIp OwoJCQkJCQkJYnJlYWs7CgkJCQkJCWNhc2UgJ0QnOgoJCQkJCQkJb3V0cHV0ICs9 IGZvcm1hdE5hbWUoJ0QnLCBkYXRlLmdldERheSgpLCBkYXlOYW1lc1Nob3J0LCBk YXlOYW1lcyk7CgkJCQkJCQlicmVhazsKCQkJCQkJY2FzZSAnbyc6CgkJCQkJCQl2 YXIgZG95ID0gZGF0ZS5nZXREYXRlKCk7CgkJCQkJCQlmb3IgKHZhciBtID0gZGF0 ZS5nZXRNb250aCgpIC0gMTsgbSA+PSAwOyBtLS0pCgkJCQkJCQkJZG95ICs9IHRo aXMuX2dldERheXNJbk1vbnRoKGRhdGUuZ2V0RnVsbFllYXIoKSwgbSk7CgkJCQkJ CQlvdXRwdXQgKz0gZm9ybWF0TnVtYmVyKCdvJywgZG95LCAzKTsKCQkJCQkJCWJy ZWFrOwoJCQkJCQljYXNlICdtJzoKCQkJCQkJCW91dHB1dCArPSBmb3JtYXROdW1i ZXIoJ20nLCBkYXRlLmdldE1vbnRoKCkgKyAxLCAyKTsKCQkJCQkJCWJyZWFrOwoJ CQkJCQljYXNlICdNJzoKCQkJCQkJCW91dHB1dCArPSBmb3JtYXROYW1lKCdNJywg ZGF0ZS5nZXRNb250aCgpLCBtb250aE5hbWVzU2hvcnQsIG1vbnRoTmFtZXMpOwoJ CQkJCQkJYnJlYWs7CgkJCQkJCWNhc2UgJ3knOgoJCQkJCQkJb3V0cHV0ICs9IChs b29rQWhlYWQoJ3knKSA/IGRhdGUuZ2V0RnVsbFllYXIoKSA6CgkJCQkJCQkJKGRh dGUuZ2V0WWVhcigpICUgMTAwIDwgMTAgPyAnMCcgOiAnJykgKyBkYXRlLmdldFll YXIoKSAlIDEwMCk7CgkJCQkJCQlicmVhazsKCQkJCQkJY2FzZSAnQCc6CgkJCQkJ CQlvdXRwdXQgKz0gZGF0ZS5nZXRUaW1lKCk7CgkJCQkJCQlicmVhazsKCQkJCQkJ Y2FzZSAiJyI6CgkJCQkJCQlpZiAobG9va0FoZWFkKCInIikpCgkJCQkJCQkJb3V0 cHV0ICs9ICInIjsKCQkJCQkJCWVsc2UKCQkJCQkJCQlsaXRlcmFsID0gdHJ1ZTsK CQkJCQkJCWJyZWFrOwoJCQkJCQlkZWZhdWx0OgoJCQkJCQkJb3V0cHV0ICs9IGZv cm1hdC5jaGFyQXQoaUZvcm1hdCk7CgkJCQkJfQoJCQl9CgkJcmV0dXJuIG91dHB1 dDsKCX0sCgoJLyogRXh0cmFjdCBhbGwgcG9zc2libGUgY2hhcmFjdGVycyBmcm9t IHRoZSBkYXRlIGZvcm1hdC4gKi8KCV9wb3NzaWJsZUNoYXJzOiBmdW5jdGlvbiAo Zm9ybWF0KSB7CgkJdmFyIGNoYXJzID0gJyc7CgkJdmFyIGxpdGVyYWwgPSBmYWxz ZTsKCQlmb3IgKHZhciBpRm9ybWF0ID0gMDsgaUZvcm1hdCA8IGZvcm1hdC5sZW5n dGg7IGlGb3JtYXQrKykKCQkJaWYgKGxpdGVyYWwpCgkJCQlpZiAoZm9ybWF0LmNo YXJBdChpRm9ybWF0KSA9PSAiJyIgJiYgIWxvb2tBaGVhZCgiJyIpKQoJCQkJCWxp dGVyYWwgPSBmYWxzZTsKCQkJCWVsc2UKCQkJCQljaGFycyArPSBmb3JtYXQuY2hh ckF0KGlGb3JtYXQpOwoJCQllbHNlCgkJCQlzd2l0Y2ggKGZvcm1hdC5jaGFyQXQo aUZvcm1hdCkpIHsKCQkJCQljYXNlICdkJzogY2FzZSAnbSc6IGNhc2UgJ3knOiBj YXNlICdAJzoKCQkJCQkJY2hhcnMgKz0gJzAxMjM0NTY3ODknOwoJCQkJCQlicmVh azsKCQkJCQljYXNlICdEJzogY2FzZSAnTSc6CgkJCQkJCXJldHVybiBudWxsOyAv LyBBY2NlcHQgYW55dGhpbmcKCQkJCQljYXNlICInIjoKCQkJCQkJaWYgKGxvb2tB aGVhZCgiJyIpKQoJCQkJCQkJY2hhcnMgKz0gIiciOwoJCQkJCQllbHNlCgkJCQkJ CQlsaXRlcmFsID0gdHJ1ZTsKCQkJCQkJYnJlYWs7CgkJCQkJZGVmYXVsdDoKCQkJ CQkJY2hhcnMgKz0gZm9ybWF0LmNoYXJBdChpRm9ybWF0KTsKCQkJCX0KCQlyZXR1 cm4gY2hhcnM7Cgl9LAoKCS8qIEdldCBhIHNldHRpbmcgdmFsdWUsIGRlZmF1bHRp bmcgaWYgbmVjZXNzYXJ5LiAqLwoJX2dldDogZnVuY3Rpb24oaW5zdCwgbmFtZSkg ewoJCXJldHVybiBpbnN0LnNldHRpbmdzW25hbWVdICE9PSB1bmRlZmluZWQgPwoJ CQlpbnN0LnNldHRpbmdzW25hbWVdIDogdGhpcy5fZGVmYXVsdHNbbmFtZV07Cgl9 LAoKCS8qIFBhcnNlIGV4aXN0aW5nIGRhdGUgYW5kIGluaXRpYWxpc2UgZGF0ZSBw aWNrZXIuICovCglfc2V0RGF0ZUZyb21GaWVsZDogZnVuY3Rpb24oaW5zdCkgewoJ CXZhciBkYXRlRm9ybWF0ID0gdGhpcy5fZ2V0KGluc3QsICdkYXRlRm9ybWF0Jyk7 CgkJdmFyIGRhdGVzID0gaW5zdC5pbnB1dCA/IGluc3QuaW5wdXQudmFsKCkgOiBu dWxsOwoJCWluc3QuZW5kRGF5ID0gaW5zdC5lbmRNb250aCA9IGluc3QuZW5kWWVh ciA9IG51bGw7CgkJdmFyIGRhdGUgPSBkZWZhdWx0RGF0ZSA9IHRoaXMuX2dldERl ZmF1bHREYXRlKGluc3QpOwoJCXZhciBzZXR0aW5ncyA9IHRoaXMuX2dldEZvcm1h dENvbmZpZyhpbnN0KTsKCQl0cnkgewoJCQlkYXRlID0gdGhpcy5wYXJzZURhdGUo ZGF0ZUZvcm1hdCwgZGF0ZXMsIHNldHRpbmdzKSB8fCBkZWZhdWx0RGF0ZTsKCQl9 IGNhdGNoIChldmVudCkgewoJCQl0aGlzLmxvZyhldmVudCk7CgkJCWRhdGUgPSBk ZWZhdWx0RGF0ZTsKCQl9CgkJaW5zdC5zZWxlY3RlZERheSA9IGRhdGUuZ2V0RGF0 ZSgpOwoJCWluc3QuZHJhd01vbnRoID0gaW5zdC5zZWxlY3RlZE1vbnRoID0gZGF0 ZS5nZXRNb250aCgpOwoJCWluc3QuZHJhd1llYXIgPSBpbnN0LnNlbGVjdGVkWWVh ciA9IGRhdGUuZ2V0RnVsbFllYXIoKTsKCQlpbnN0LmN1cnJlbnREYXkgPSAoZGF0 ZXMgPyBkYXRlLmdldERhdGUoKSA6IDApOwoJCWluc3QuY3VycmVudE1vbnRoID0g KGRhdGVzID8gZGF0ZS5nZXRNb250aCgpIDogMCk7CgkJaW5zdC5jdXJyZW50WWVh ciA9IChkYXRlcyA/IGRhdGUuZ2V0RnVsbFllYXIoKSA6IDApOwoJCXRoaXMuX2Fk anVzdEluc3REYXRlKGluc3QpOwoJfSwKCgkvKiBSZXRyaWV2ZSB0aGUgZGVmYXVs dCBkYXRlIHNob3duIG9uIG9wZW5pbmcuICovCglfZ2V0RGVmYXVsdERhdGU6IGZ1 bmN0aW9uKGluc3QpIHsKCQl2YXIgZGF0ZSA9IHRoaXMuX2RldGVybWluZURhdGUo dGhpcy5fZ2V0KGluc3QsICdkZWZhdWx0RGF0ZScpLCBuZXcgRGF0ZSgpKTsKCQl2 YXIgbWluRGF0ZSA9IHRoaXMuX2dldE1pbk1heERhdGUoaW5zdCwgJ21pbicsIHRy dWUpOwoJCXZhciBtYXhEYXRlID0gdGhpcy5fZ2V0TWluTWF4RGF0ZShpbnN0LCAn bWF4Jyk7CgkJZGF0ZSA9IChtaW5EYXRlICYmIGRhdGUgPCBtaW5EYXRlID8gbWlu RGF0ZSA6IGRhdGUpOwoJCWRhdGUgPSAobWF4RGF0ZSAmJiBkYXRlID4gbWF4RGF0 ZSA/IG1heERhdGUgOiBkYXRlKTsKCQlyZXR1cm4gZGF0ZTsKCX0sCgoJLyogQSBk YXRlIG1heSBiZSBzcGVjaWZpZWQgYXMgYW4gZXhhY3QgdmFsdWUgb3IgYSByZWxh dGl2ZSBvbmUuICovCglfZGV0ZXJtaW5lRGF0ZTogZnVuY3Rpb24oZGF0ZSwgZGVm YXVsdERhdGUpIHsKCQl2YXIgb2Zmc2V0TnVtZXJpYyA9IGZ1bmN0aW9uKG9mZnNl dCkgewoJCQl2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7CgkJCWRhdGUuc2V0RGF0ZShk YXRlLmdldERhdGUoKSArIG9mZnNldCk7CgkJCXJldHVybiBkYXRlOwoJCX07CgkJ dmFyIG9mZnNldFN0cmluZyA9IGZ1bmN0aW9uKG9mZnNldCwgZ2V0RGF5c0luTW9u dGgpIHsKCQkJdmFyIGRhdGUgPSBuZXcgRGF0ZSgpOwoJCQl2YXIgeWVhciA9IGRh dGUuZ2V0RnVsbFllYXIoKTsKCQkJdmFyIG1vbnRoID0gZGF0ZS5nZXRNb250aCgp OwoJCQl2YXIgZGF5ID0gZGF0ZS5nZXREYXRlKCk7CgkJCXZhciBwYXR0ZXJuID0g LyhbKy1dP1swLTldKylccyooZHxEfHd8V3xtfE18eXxZKT8vZzsKCQkJdmFyIG1h dGNoZXMgPSBwYXR0ZXJuLmV4ZWMob2Zmc2V0KTsKCQkJd2hpbGUgKG1hdGNoZXMp IHsKCQkJCXN3aXRjaCAobWF0Y2hlc1syXSB8fCAnZCcpIHsKCQkJCQljYXNlICdk JyA6IGNhc2UgJ0QnIDoKCQkJCQkJZGF5ICs9IHBhcnNlSW50KG1hdGNoZXNbMV0s MTApOyBicmVhazsKCQkJCQljYXNlICd3JyA6IGNhc2UgJ1cnIDoKCQkJCQkJZGF5 ICs9IHBhcnNlSW50KG1hdGNoZXNbMV0sMTApICogNzsgYnJlYWs7CgkJCQkJY2Fz ZSAnbScgOiBjYXNlICdNJyA6CgkJCQkJCW1vbnRoICs9IHBhcnNlSW50KG1hdGNo ZXNbMV0sMTApOwoJCQkJCQlkYXkgPSBNYXRoLm1pbihkYXksIGdldERheXNJbk1v bnRoKHllYXIsIG1vbnRoKSk7CgkJCQkJCWJyZWFrOwoJCQkJCWNhc2UgJ3knOiBj YXNlICdZJyA6CgkJCQkJCXllYXIgKz0gcGFyc2VJbnQobWF0Y2hlc1sxXSwxMCk7 CgkJCQkJCWRheSA9IE1hdGgubWluKGRheSwgZ2V0RGF5c0luTW9udGgoeWVhciwg bW9udGgpKTsKCQkJCQkJYnJlYWs7CgkJCQl9CgkJCQltYXRjaGVzID0gcGF0dGVy bi5leGVjKG9mZnNldCk7CgkJCX0KCQkJcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1v bnRoLCBkYXkpOwoJCX07CgkJZGF0ZSA9IChkYXRlID09IG51bGwgPyBkZWZhdWx0 RGF0ZSA6CgkJCSh0eXBlb2YgZGF0ZSA9PSAnc3RyaW5nJyA/IG9mZnNldFN0cmlu ZyhkYXRlLCB0aGlzLl9nZXREYXlzSW5Nb250aCkgOgoJCQkodHlwZW9mIGRhdGUg PT0gJ251bWJlcicgPyAoaXNOYU4oZGF0ZSkgPyBkZWZhdWx0RGF0ZSA6IG9mZnNl dE51bWVyaWMoZGF0ZSkpIDogZGF0ZSkpKTsKCQlkYXRlID0gKGRhdGUgJiYgZGF0 ZS50b1N0cmluZygpID09ICdJbnZhbGlkIERhdGUnID8gZGVmYXVsdERhdGUgOiBk YXRlKTsKCQlpZiAoZGF0ZSkgewoJCQlkYXRlLnNldEhvdXJzKDApOwoJCQlkYXRl LnNldE1pbnV0ZXMoMCk7CgkJCWRhdGUuc2V0U2Vjb25kcygwKTsKCQkJZGF0ZS5z ZXRNaWxsaXNlY29uZHMoMCk7CgkJfQoJCXJldHVybiB0aGlzLl9kYXlsaWdodFNh dmluZ0FkanVzdChkYXRlKTsKCX0sCgoJLyogSGFuZGxlIHN3aXRjaCB0by9mcm9t IGRheWxpZ2h0IHNhdmluZy4KCSAgIEhvdXJzIG1heSBiZSBub24temVybyBvbiBk YXlsaWdodCBzYXZpbmcgY3V0LW92ZXI6CgkgICA+IDEyIHdoZW4gbWlkbmlnaHQg Y2hhbmdlb3ZlciwgYnV0IHRoZW4gY2Fubm90IGdlbmVyYXRlCgkgICBtaWRuaWdo dCBkYXRldGltZSwgc28ganVtcCB0byAxQU0sIG90aGVyd2lzZSByZXNldC4KCSAg IEBwYXJhbSAgZGF0ZSAgKERhdGUpIHRoZSBkYXRlIHRvIGNoZWNrCgkgICBAcmV0 dXJuICAoRGF0ZSkgdGhlIGNvcnJlY3RlZCBkYXRlICovCglfZGF5bGlnaHRTYXZp bmdBZGp1c3Q6IGZ1bmN0aW9uKGRhdGUpIHsKCQlpZiAoIWRhdGUpIHJldHVybiBu dWxsOwoJCWRhdGUuc2V0SG91cnMoZGF0ZS5nZXRIb3VycygpID4gMTIgPyBkYXRl LmdldEhvdXJzKCkgKyAyIDogMCk7CgkJcmV0dXJuIGRhdGU7Cgl9LAoKCS8qIFNl dCB0aGUgZGF0ZShzKSBkaXJlY3RseS4gKi8KCV9zZXREYXRlOiBmdW5jdGlvbihp bnN0LCBkYXRlLCBlbmREYXRlKSB7CgkJdmFyIGNsZWFyID0gIShkYXRlKTsKCQl2 YXIgb3JpZ01vbnRoID0gaW5zdC5zZWxlY3RlZE1vbnRoOwoJCXZhciBvcmlnWWVh ciA9IGluc3Quc2VsZWN0ZWRZZWFyOwoJCWRhdGUgPSB0aGlzLl9kZXRlcm1pbmVE YXRlKGRhdGUsIG5ldyBEYXRlKCkpOwoJCWluc3Quc2VsZWN0ZWREYXkgPSBpbnN0 LmN1cnJlbnREYXkgPSBkYXRlLmdldERhdGUoKTsKCQlpbnN0LmRyYXdNb250aCA9 IGluc3Quc2VsZWN0ZWRNb250aCA9IGluc3QuY3VycmVudE1vbnRoID0gZGF0ZS5n ZXRNb250aCgpOwoJCWluc3QuZHJhd1llYXIgPSBpbnN0LnNlbGVjdGVkWWVhciA9 IGluc3QuY3VycmVudFllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7CgkJaWYgKG9y aWdNb250aCAhPSBpbnN0LnNlbGVjdGVkTW9udGggfHwgb3JpZ1llYXIgIT0gaW5z dC5zZWxlY3RlZFllYXIpCgkJCXRoaXMuX25vdGlmeUNoYW5nZShpbnN0KTsKCQl0 aGlzLl9hZGp1c3RJbnN0RGF0ZShpbnN0KTsKCQlpZiAoaW5zdC5pbnB1dCkgewoJ CQlpbnN0LmlucHV0LnZhbChjbGVhciA/ICcnIDogdGhpcy5fZm9ybWF0RGF0ZShp bnN0KSk7CgkJfQoJfSwKCgkvKiBSZXRyaWV2ZSB0aGUgZGF0ZShzKSBkaXJlY3Rs eS4gKi8KCV9nZXREYXRlOiBmdW5jdGlvbihpbnN0KSB7CgkJdmFyIHN0YXJ0RGF0 ZSA9ICghaW5zdC5jdXJyZW50WWVhciB8fCAoaW5zdC5pbnB1dCAmJiBpbnN0Lmlu cHV0LnZhbCgpID09ICcnKSA/IG51bGwgOgoJCQl0aGlzLl9kYXlsaWdodFNhdmlu Z0FkanVzdChuZXcgRGF0ZSgKCQkJaW5zdC5jdXJyZW50WWVhciwgaW5zdC5jdXJy ZW50TW9udGgsIGluc3QuY3VycmVudERheSkpKTsKCQkJcmV0dXJuIHN0YXJ0RGF0 ZTsKCX0sCgoJLyogR2VuZXJhdGUgdGhlIEhUTUwgZm9yIHRoZSBjdXJyZW50IHN0 YXRlIG9mIHRoZSBkYXRlIHBpY2tlci4gKi8KCV9nZW5lcmF0ZUhUTUw6IGZ1bmN0 aW9uKGluc3QpIHsKCQl2YXIgdG9kYXkgPSBuZXcgRGF0ZSgpOwoJCXRvZGF5ID0g dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoCgkJCW5ldyBEYXRlKHRvZGF5Lmdl dEZ1bGxZZWFyKCksIHRvZGF5LmdldE1vbnRoKCksIHRvZGF5LmdldERhdGUoKSkp OyAvLyBjbGVhciB0aW1lCgkJdmFyIGlzUlRMID0gdGhpcy5fZ2V0KGluc3QsICdp c1JUTCcpOwoJCXZhciBzaG93QnV0dG9uUGFuZWwgPSB0aGlzLl9nZXQoaW5zdCwg J3Nob3dCdXR0b25QYW5lbCcpOwoJCXZhciBoaWRlSWZOb1ByZXZOZXh0ID0gdGhp cy5fZ2V0KGluc3QsICdoaWRlSWZOb1ByZXZOZXh0Jyk7CgkJdmFyIG5hdmlnYXRp b25Bc0RhdGVGb3JtYXQgPSB0aGlzLl9nZXQoaW5zdCwgJ25hdmlnYXRpb25Bc0Rh dGVGb3JtYXQnKTsKCQl2YXIgbnVtTW9udGhzID0gdGhpcy5fZ2V0TnVtYmVyT2ZN b250aHMoaW5zdCk7CgkJdmFyIHNob3dDdXJyZW50QXRQb3MgPSB0aGlzLl9nZXQo aW5zdCwgJ3Nob3dDdXJyZW50QXRQb3MnKTsKCQl2YXIgc3RlcE1vbnRocyA9IHRo aXMuX2dldChpbnN0LCAnc3RlcE1vbnRocycpOwoJCXZhciBzdGVwQmlnTW9udGhz ID0gdGhpcy5fZ2V0KGluc3QsICdzdGVwQmlnTW9udGhzJyk7CgkJdmFyIGlzTXVs dGlNb250aCA9IChudW1Nb250aHNbMF0gIT0gMSB8fCBudW1Nb250aHNbMV0gIT0g MSk7CgkJdmFyIGN1cnJlbnREYXRlID0gdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1 c3QoKCFpbnN0LmN1cnJlbnREYXkgPyBuZXcgRGF0ZSg5OTk5LCA5LCA5KSA6CgkJ CW5ldyBEYXRlKGluc3QuY3VycmVudFllYXIsIGluc3QuY3VycmVudE1vbnRoLCBp bnN0LmN1cnJlbnREYXkpKSk7CgkJdmFyIG1pbkRhdGUgPSB0aGlzLl9nZXRNaW5N YXhEYXRlKGluc3QsICdtaW4nLCB0cnVlKTsKCQl2YXIgbWF4RGF0ZSA9IHRoaXMu X2dldE1pbk1heERhdGUoaW5zdCwgJ21heCcpOwoJCXZhciBkcmF3TW9udGggPSBp bnN0LmRyYXdNb250aCAtIHNob3dDdXJyZW50QXRQb3M7CgkJdmFyIGRyYXdZZWFy ID0gaW5zdC5kcmF3WWVhcjsKCQlpZiAoZHJhd01vbnRoIDwgMCkgewoJCQlkcmF3 TW9udGggKz0gMTI7CgkJCWRyYXdZZWFyLS07CgkJfQoJCWlmIChtYXhEYXRlKSB7 CgkJCXZhciBtYXhEcmF3ID0gdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3 IERhdGUobWF4RGF0ZS5nZXRGdWxsWWVhcigpLAoJCQkJbWF4RGF0ZS5nZXRNb250 aCgpIC0gbnVtTW9udGhzWzFdICsgMSwgbWF4RGF0ZS5nZXREYXRlKCkpKTsKCQkJ bWF4RHJhdyA9IChtaW5EYXRlICYmIG1heERyYXcgPCBtaW5EYXRlID8gbWluRGF0 ZSA6IG1heERyYXcpOwoJCQl3aGlsZSAodGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1 c3QobmV3IERhdGUoZHJhd1llYXIsIGRyYXdNb250aCwgMSkpID4gbWF4RHJhdykg ewoJCQkJZHJhd01vbnRoLS07CgkJCQlpZiAoZHJhd01vbnRoIDwgMCkgewoJCQkJ CWRyYXdNb250aCA9IDExOwoJCQkJCWRyYXdZZWFyLS07CgkJCQl9CgkJCX0KCQl9 CgkJaW5zdC5kcmF3TW9udGggPSBkcmF3TW9udGg7CgkJaW5zdC5kcmF3WWVhciA9 IGRyYXdZZWFyOwoJCXZhciBwcmV2VGV4dCA9IHRoaXMuX2dldChpbnN0LCAncHJl dlRleHQnKTsKCQlwcmV2VGV4dCA9ICghbmF2aWdhdGlvbkFzRGF0ZUZvcm1hdCA/ IHByZXZUZXh0IDogdGhpcy5mb3JtYXREYXRlKHByZXZUZXh0LAoJCQl0aGlzLl9k YXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShkcmF3WWVhciwgZHJhd01vbnRo IC0gc3RlcE1vbnRocywgMSkpLAoJCQl0aGlzLl9nZXRGb3JtYXRDb25maWcoaW5z dCkpKTsKCQl2YXIgcHJldiA9ICh0aGlzLl9jYW5BZGp1c3RNb250aChpbnN0LCAt MSwgZHJhd1llYXIsIGRyYXdNb250aCkgPwoJCQknPGEgY2xhc3M9InVpLWRhdGVw aWNrZXItcHJldiB1aS1jb3JuZXItYWxsIiBvbmNsaWNrPSJEUF9qUXVlcnkuZGF0 ZXBpY2tlci5fYWRqdXN0RGF0ZShcJyMnICsgaW5zdC5pZCArICdcJywgLScgKyBz dGVwTW9udGhzICsgJywgXCdNXCcpOyInICsKCQkJJyB0aXRsZT0iJyArIHByZXZU ZXh0ICsgJyI+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1jaXJjbGUtdHJp YW5nbGUtJyArICggaXNSVEwgPyAnZScgOiAndycpICsgJyI+JyArIHByZXZUZXh0 ICsgJzwvc3Bhbj48L2E+JyA6CgkJCShoaWRlSWZOb1ByZXZOZXh0ID8gJycgOiAn PGEgY2xhc3M9InVpLWRhdGVwaWNrZXItcHJldiB1aS1jb3JuZXItYWxsIHVpLXN0 YXRlLWRpc2FibGVkIiB0aXRsZT0iJysgcHJldlRleHQgKyciPjxzcGFuIGNsYXNz PSJ1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLScgKyAoIGlzUlRMID8g J2UnIDogJ3cnKSArICciPicgKyBwcmV2VGV4dCArICc8L3NwYW4+PC9hPicpKTsK CQl2YXIgbmV4dFRleHQgPSB0aGlzLl9nZXQoaW5zdCwgJ25leHRUZXh0Jyk7CgkJ bmV4dFRleHQgPSAoIW5hdmlnYXRpb25Bc0RhdGVGb3JtYXQgPyBuZXh0VGV4dCA6 IHRoaXMuZm9ybWF0RGF0ZShuZXh0VGV4dCwKCQkJdGhpcy5fZGF5bGlnaHRTYXZp bmdBZGp1c3QobmV3IERhdGUoZHJhd1llYXIsIGRyYXdNb250aCArIHN0ZXBNb250 aHMsIDEpKSwKCQkJdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGluc3QpKSk7CgkJdmFy IG5leHQgPSAodGhpcy5fY2FuQWRqdXN0TW9udGgoaW5zdCwgKzEsIGRyYXdZZWFy LCBkcmF3TW9udGgpID8KCQkJJzxhIGNsYXNzPSJ1aS1kYXRlcGlja2VyLW5leHQg dWktY29ybmVyLWFsbCIgb25jbGljaz0iRFBfalF1ZXJ5LmRhdGVwaWNrZXIuX2Fk anVzdERhdGUoXCcjJyArIGluc3QuaWQgKyAnXCcsICsnICsgc3RlcE1vbnRocyAr ICcsIFwnTVwnKTsiJyArCgkJCScgdGl0bGU9IicgKyBuZXh0VGV4dCArICciPjxz cGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLScgKyAo IGlzUlRMID8gJ3cnIDogJ2UnKSArICciPicgKyBuZXh0VGV4dCArICc8L3NwYW4+ PC9hPicgOgoJCQkoaGlkZUlmTm9QcmV2TmV4dCA/ICcnIDogJzxhIGNsYXNzPSJ1 aS1kYXRlcGlja2VyLW5leHQgdWktY29ybmVyLWFsbCB1aS1zdGF0ZS1kaXNhYmxl ZCIgdGl0bGU9IicrIG5leHRUZXh0ICsgJyI+PHNwYW4gY2xhc3M9InVpLWljb24g dWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtJyArICggaXNSVEwgPyAndycgOiAnZScp ICsgJyI+JyArIG5leHRUZXh0ICsgJzwvc3Bhbj48L2E+JykpOwoJCXZhciBjdXJy ZW50VGV4dCA9IHRoaXMuX2dldChpbnN0LCAnY3VycmVudFRleHQnKTsKCQl2YXIg Z290b0RhdGUgPSAodGhpcy5fZ2V0KGluc3QsICdnb3RvQ3VycmVudCcpICYmIGlu c3QuY3VycmVudERheSA/IGN1cnJlbnREYXRlIDogdG9kYXkpOwoJCWN1cnJlbnRU ZXh0ID0gKCFuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0ID8gY3VycmVudFRleHQgOgoJ CQl0aGlzLmZvcm1hdERhdGUoY3VycmVudFRleHQsIGdvdG9EYXRlLCB0aGlzLl9n ZXRGb3JtYXRDb25maWcoaW5zdCkpKTsKCQl2YXIgY29udHJvbHMgPSAoIWluc3Qu aW5saW5lID8gJzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0idWktZGF0ZXBp Y2tlci1jbG9zZSB1aS1zdGF0ZS1kZWZhdWx0IHVpLXByaW9yaXR5LXByaW1hcnkg dWktY29ybmVyLWFsbCIgb25jbGljaz0iRFBfalF1ZXJ5LmRhdGVwaWNrZXIuX2hp ZGVEYXRlcGlja2VyKCk7Ij4nICsgdGhpcy5fZ2V0KGluc3QsICdjbG9zZVRleHQn KSArICc8L2J1dHRvbj4nIDogJycpOwoJCXZhciBidXR0b25QYW5lbCA9IChzaG93 QnV0dG9uUGFuZWwpID8gJzxkaXYgY2xhc3M9InVpLWRhdGVwaWNrZXItYnV0dG9u cGFuZSB1aS13aWRnZXQtY29udGVudCI+JyArIChpc1JUTCA/IGNvbnRyb2xzIDog JycpICsKCQkJKHRoaXMuX2lzSW5SYW5nZShpbnN0LCBnb3RvRGF0ZSkgPyAnPGJ1 dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJ1aS1kYXRlcGlja2VyLWN1cnJlbnQg dWktc3RhdGUtZGVmYXVsdCB1aS1wcmlvcml0eS1zZWNvbmRhcnkgdWktY29ybmVy LWFsbCIgb25jbGljaz0iRFBfalF1ZXJ5LmRhdGVwaWNrZXIuX2dvdG9Ub2RheShc JyMnICsgaW5zdC5pZCArICdcJyk7IicgKwoJCQknPicgKyBjdXJyZW50VGV4dCAr ICc8L2J1dHRvbj4nIDogJycpICsgKGlzUlRMID8gJycgOiBjb250cm9scykgKyAn PC9kaXY+JyA6ICcnOwoJCXZhciBmaXJzdERheSA9IHBhcnNlSW50KHRoaXMuX2dl dChpbnN0LCAnZmlyc3REYXknKSwxMCk7CgkJZmlyc3REYXkgPSAoaXNOYU4oZmly c3REYXkpID8gMCA6IGZpcnN0RGF5KTsKCQl2YXIgZGF5TmFtZXMgPSB0aGlzLl9n ZXQoaW5zdCwgJ2RheU5hbWVzJyk7CgkJdmFyIGRheU5hbWVzU2hvcnQgPSB0aGlz Ll9nZXQoaW5zdCwgJ2RheU5hbWVzU2hvcnQnKTsKCQl2YXIgZGF5TmFtZXNNaW4g PSB0aGlzLl9nZXQoaW5zdCwgJ2RheU5hbWVzTWluJyk7CgkJdmFyIG1vbnRoTmFt ZXMgPSB0aGlzLl9nZXQoaW5zdCwgJ21vbnRoTmFtZXMnKTsKCQl2YXIgbW9udGhO YW1lc1Nob3J0ID0gdGhpcy5fZ2V0KGluc3QsICdtb250aE5hbWVzU2hvcnQnKTsK CQl2YXIgYmVmb3JlU2hvd0RheSA9IHRoaXMuX2dldChpbnN0LCAnYmVmb3JlU2hv d0RheScpOwoJCXZhciBzaG93T3RoZXJNb250aHMgPSB0aGlzLl9nZXQoaW5zdCwg J3Nob3dPdGhlck1vbnRocycpOwoJCXZhciBjYWxjdWxhdGVXZWVrID0gdGhpcy5f Z2V0KGluc3QsICdjYWxjdWxhdGVXZWVrJykgfHwgdGhpcy5pc284NjAxV2VlazsK CQl2YXIgZW5kRGF0ZSA9IGluc3QuZW5kRGF5ID8gdGhpcy5fZGF5bGlnaHRTYXZp bmdBZGp1c3QoCgkJCW5ldyBEYXRlKGluc3QuZW5kWWVhciwgaW5zdC5lbmRNb250 aCwgaW5zdC5lbmREYXkpKSA6IGN1cnJlbnREYXRlOwoJCXZhciBkZWZhdWx0RGF0 ZSA9IHRoaXMuX2dldERlZmF1bHREYXRlKGluc3QpOwoJCXZhciBodG1sID0gJyc7 CgkJZm9yICh2YXIgcm93ID0gMDsgcm93IDwgbnVtTW9udGhzWzBdOyByb3crKykg ewoJCQl2YXIgZ3JvdXAgPSAnJzsKCQkJZm9yICh2YXIgY29sID0gMDsgY29sIDwg bnVtTW9udGhzWzFdOyBjb2wrKykgewoJCQkJdmFyIHNlbGVjdGVkRGF0ZSA9IHRo aXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGRyYXdZZWFyLCBkcmF3 TW9udGgsIGluc3Quc2VsZWN0ZWREYXkpKTsKCQkJCXZhciBjb3JuZXJDbGFzcyA9 ICcgdWktY29ybmVyLWFsbCc7CgkJCQl2YXIgY2FsZW5kZXIgPSAnJzsKCQkJCWlm IChpc011bHRpTW9udGgpIHsKCQkJCQljYWxlbmRlciArPSAnPGRpdiBjbGFzcz0i dWktZGF0ZXBpY2tlci1ncm91cCB1aS1kYXRlcGlja2VyLWdyb3VwLSc7CgkJCQkJ c3dpdGNoIChjb2wpIHsKCQkJCQkJY2FzZSAwOiBjYWxlbmRlciArPSAnZmlyc3Qn OyBjb3JuZXJDbGFzcyA9ICcgdWktY29ybmVyLScgKyAoaXNSVEwgPyAncmlnaHQn IDogJ2xlZnQnKTsgYnJlYWs7CgkJCQkJCWNhc2UgbnVtTW9udGhzWzFdLTE6IGNh bGVuZGVyICs9ICdsYXN0JzsgY29ybmVyQ2xhc3MgPSAnIHVpLWNvcm5lci0nICsg KGlzUlRMID8gJ2xlZnQnIDogJ3JpZ2h0Jyk7IGJyZWFrOwoJCQkJCQlkZWZhdWx0 OiBjYWxlbmRlciArPSAnbWlkZGxlJzsgY29ybmVyQ2xhc3MgPSAnJzsgYnJlYWs7 CgkJCQkJfQoJCQkJCWNhbGVuZGVyICs9ICciPic7CgkJCQl9CgkJCQljYWxlbmRl ciArPSAnPGRpdiBjbGFzcz0idWktZGF0ZXBpY2tlci1oZWFkZXIgdWktd2lkZ2V0 LWhlYWRlciB1aS1oZWxwZXItY2xlYXJmaXgnICsgY29ybmVyQ2xhc3MgKyAnIj4n ICsKCQkJCQkoL2FsbHxsZWZ0Ly50ZXN0KGNvcm5lckNsYXNzKSAmJiByb3cgPT0g MCA/IChpc1JUTCA/IG5leHQgOiBwcmV2KSA6ICcnKSArCgkJCQkJKC9hbGx8cmln aHQvLnRlc3QoY29ybmVyQ2xhc3MpICYmIHJvdyA9PSAwID8gKGlzUlRMID8gcHJl diA6IG5leHQpIDogJycpICsKCQkJCQl0aGlzLl9nZW5lcmF0ZU1vbnRoWWVhckhl YWRlcihpbnN0LCBkcmF3TW9udGgsIGRyYXdZZWFyLCBtaW5EYXRlLCBtYXhEYXRl LAoJCQkJCXNlbGVjdGVkRGF0ZSwgcm93ID4gMCB8fCBjb2wgPiAwLCBtb250aE5h bWVzLCBtb250aE5hbWVzU2hvcnQpICsgLy8gZHJhdyBtb250aCBoZWFkZXJzCgkJ CQkJJzwvZGl2Pjx0YWJsZSBjbGFzcz0idWktZGF0ZXBpY2tlci1jYWxlbmRhciI+ PHRoZWFkPicgKwoJCQkJCSc8dHI+JzsKCQkJCXZhciB0aGVhZCA9ICcnOwoJCQkJ Zm9yICh2YXIgZG93ID0gMDsgZG93IDwgNzsgZG93KyspIHsgLy8gZGF5cyBvZiB0 aGUgd2VlawoJCQkJCXZhciBkYXkgPSAoZG93ICsgZmlyc3REYXkpICUgNzsKCQkJ CQl0aGVhZCArPSAnPHRoJyArICgoZG93ICsgZmlyc3REYXkgKyA2KSAlIDcgPj0g NSA/ICcgY2xhc3M9InVpLWRhdGVwaWNrZXItd2Vlay1lbmQiJyA6ICcnKSArICc+ JyArCgkJCQkJCSc8c3BhbiB0aXRsZT0iJyArIGRheU5hbWVzW2RheV0gKyAnIj4n ICsgZGF5TmFtZXNNaW5bZGF5XSArICc8L3NwYW4+PC90aD4nOwoJCQkJfQoJCQkJ Y2FsZW5kZXIgKz0gdGhlYWQgKyAnPC90cj48L3RoZWFkPjx0Ym9keT4nOwoJCQkJ dmFyIGRheXNJbk1vbnRoID0gdGhpcy5fZ2V0RGF5c0luTW9udGgoZHJhd1llYXIs IGRyYXdNb250aCk7CgkJCQlpZiAoZHJhd1llYXIgPT0gaW5zdC5zZWxlY3RlZFll YXIgJiYgZHJhd01vbnRoID09IGluc3Quc2VsZWN0ZWRNb250aCkKCQkJCQlpbnN0 LnNlbGVjdGVkRGF5ID0gTWF0aC5taW4oaW5zdC5zZWxlY3RlZERheSwgZGF5c0lu TW9udGgpOwoJCQkJdmFyIGxlYWREYXlzID0gKHRoaXMuX2dldEZpcnN0RGF5T2ZN b250aChkcmF3WWVhciwgZHJhd01vbnRoKSAtIGZpcnN0RGF5ICsgNykgJSA3OwoJ CQkJdmFyIG51bVJvd3MgPSAoaXNNdWx0aU1vbnRoID8gNiA6IE1hdGguY2VpbCgo bGVhZERheXMgKyBkYXlzSW5Nb250aCkgLyA3KSk7IC8vIGNhbGN1bGF0ZSB0aGUg bnVtYmVyIG9mIHJvd3MgdG8gZ2VuZXJhdGUKCQkJCXZhciBwcmludERhdGUgPSB0 aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShkcmF3WWVhciwgZHJh d01vbnRoLCAxIC0gbGVhZERheXMpKTsKCQkJCWZvciAodmFyIGRSb3cgPSAwOyBk Um93IDwgbnVtUm93czsgZFJvdysrKSB7IC8vIGNyZWF0ZSBkYXRlIHBpY2tlciBy b3dzCgkJCQkJY2FsZW5kZXIgKz0gJzx0cj4nOwoJCQkJCXZhciB0Ym9keSA9ICcn OwoJCQkJCWZvciAodmFyIGRvdyA9IDA7IGRvdyA8IDc7IGRvdysrKSB7IC8vIGNy ZWF0ZSBkYXRlIHBpY2tlciBkYXlzCgkJCQkJCXZhciBkYXlTZXR0aW5ncyA9IChi ZWZvcmVTaG93RGF5ID8KCQkJCQkJCWJlZm9yZVNob3dEYXkuYXBwbHkoKGluc3Qu aW5wdXQgPyBpbnN0LmlucHV0WzBdIDogbnVsbCksIFtwcmludERhdGVdKSA6IFt0 cnVlLCAnJ10pOwoJCQkJCQl2YXIgb3RoZXJNb250aCA9IChwcmludERhdGUuZ2V0 TW9udGgoKSAhPSBkcmF3TW9udGgpOwoJCQkJCQl2YXIgdW5zZWxlY3RhYmxlID0g b3RoZXJNb250aCB8fCAhZGF5U2V0dGluZ3NbMF0gfHwKCQkJCQkJCShtaW5EYXRl ICYmIHByaW50RGF0ZSA8IG1pbkRhdGUpIHx8IChtYXhEYXRlICYmIHByaW50RGF0 ZSA+IG1heERhdGUpOwoJCQkJCQl0Ym9keSArPSAnPHRkIGNsYXNzPSInICsKCQkJ CQkJCSgoZG93ICsgZmlyc3REYXkgKyA2KSAlIDcgPj0gNSA/ICcgdWktZGF0ZXBp Y2tlci13ZWVrLWVuZCcgOiAnJykgKyAvLyBoaWdobGlnaHQgd2Vla2VuZHMKCQkJ CQkJCShvdGhlck1vbnRoID8gJyB1aS1kYXRlcGlja2VyLW90aGVyLW1vbnRoJyA6 ICcnKSArIC8vIGhpZ2hsaWdodCBkYXlzIGZyb20gb3RoZXIgbW9udGhzCgkJCQkJ CQkoKHByaW50RGF0ZS5nZXRUaW1lKCkgPT0gc2VsZWN0ZWREYXRlLmdldFRpbWUo KSAmJiBkcmF3TW9udGggPT0gaW5zdC5zZWxlY3RlZE1vbnRoICYmIGluc3QuX2tl eUV2ZW50KSB8fCAvLyB1c2VyIHByZXNzZWQga2V5CgkJCQkJCQkoZGVmYXVsdERh dGUuZ2V0VGltZSgpID09IHByaW50RGF0ZS5nZXRUaW1lKCkgJiYgZGVmYXVsdERh dGUuZ2V0VGltZSgpID09IHNlbGVjdGVkRGF0ZS5nZXRUaW1lKCkpID8KCQkJCQkJ CS8vIG9yIGRlZmF1bHREYXRlIGlzIGN1cnJlbnQgcHJpbnRlZERhdGUgYW5kIGRl ZmF1bHREYXRlIGlzIHNlbGVjdGVkRGF0ZQoJCQkJCQkJJyAnICsgdGhpcy5fZGF5 T3ZlckNsYXNzIDogJycpICsgLy8gaGlnaGxpZ2h0IHNlbGVjdGVkIGRheQoJCQkJ CQkJKHVuc2VsZWN0YWJsZSA/ICcgJyArIHRoaXMuX3Vuc2VsZWN0YWJsZUNsYXNz ICsgJyB1aS1zdGF0ZS1kaXNhYmxlZCc6ICcnKSArICAvLyBoaWdobGlnaHQgdW5z ZWxlY3RhYmxlIGRheXMKCQkJCQkJCShvdGhlck1vbnRoICYmICFzaG93T3RoZXJN b250aHMgPyAnJyA6ICcgJyArIGRheVNldHRpbmdzWzFdICsgLy8gaGlnaGxpZ2h0 IGN1c3RvbSBkYXRlcwoJCQkJCQkJKHByaW50RGF0ZS5nZXRUaW1lKCkgPj0gY3Vy cmVudERhdGUuZ2V0VGltZSgpICYmIHByaW50RGF0ZS5nZXRUaW1lKCkgPD0gZW5k RGF0ZS5nZXRUaW1lKCkgPyAvLyBpbiBjdXJyZW50IHJhbmdlCgkJCQkJCQknICcg KyB0aGlzLl9jdXJyZW50Q2xhc3MgOiAnJykgKyAvLyBoaWdobGlnaHQgc2VsZWN0 ZWQgZGF5CgkJCQkJCQkocHJpbnREYXRlLmdldFRpbWUoKSA9PSB0b2RheS5nZXRU aW1lKCkgPyAnIHVpLWRhdGVwaWNrZXItdG9kYXknIDogJycpKSArICciJyArIC8v IGhpZ2hsaWdodCB0b2RheSAoaWYgZGlmZmVyZW50KQoJCQkJCQkJKCghb3RoZXJN b250aCB8fCBzaG93T3RoZXJNb250aHMpICYmIGRheVNldHRpbmdzWzJdID8gJyB0 aXRsZT0iJyArIGRheVNldHRpbmdzWzJdICsgJyInIDogJycpICsgLy8gY2VsbCB0 aXRsZQoJCQkJCQkJKHVuc2VsZWN0YWJsZSA/ICcnIDogJyBvbmNsaWNrPSJEUF9q UXVlcnkuZGF0ZXBpY2tlci5fc2VsZWN0RGF5KFwnIycgKwoJCQkJCQkJaW5zdC5p ZCArICdcJywnICsgZHJhd01vbnRoICsgJywnICsgZHJhd1llYXIgKyAnLCB0aGlz KTtyZXR1cm4gZmFsc2U7IicpICsgJz4nICsgLy8gYWN0aW9ucwoJCQkJCQkJKG90 aGVyTW9udGggPyAoc2hvd090aGVyTW9udGhzID8gcHJpbnREYXRlLmdldERhdGUo KSA6ICcmI3hhMDsnKSA6IC8vIGRpc3BsYXkgZm9yIG90aGVyIG1vbnRocwoJCQkJ CQkJKHVuc2VsZWN0YWJsZSA/ICc8c3BhbiBjbGFzcz0idWktc3RhdGUtZGVmYXVs dCI+JyArIHByaW50RGF0ZS5nZXREYXRlKCkgKyAnPC9zcGFuPicgOiAnPGEgY2xh c3M9InVpLXN0YXRlLWRlZmF1bHQnICsKCQkJCQkJCShwcmludERhdGUuZ2V0VGlt ZSgpID09IHRvZGF5LmdldFRpbWUoKSA/ICcgdWktc3RhdGUtaGlnaGxpZ2h0JyA6 ICcnKSArCgkJCQkJCQkocHJpbnREYXRlLmdldFRpbWUoKSA+PSBjdXJyZW50RGF0 ZS5nZXRUaW1lKCkgJiYgcHJpbnREYXRlLmdldFRpbWUoKSA8PSBlbmREYXRlLmdl dFRpbWUoKSA/IC8vIGluIGN1cnJlbnQgcmFuZ2UKCQkJCQkJCScgdWktc3RhdGUt YWN0aXZlJyA6ICcnKSArIC8vIGhpZ2hsaWdodCBzZWxlY3RlZCBkYXkKCQkJCQkJ CSciIGhyZWY9IiMiPicgKyBwcmludERhdGUuZ2V0RGF0ZSgpICsgJzwvYT4nKSkg KyAnPC90ZD4nOyAvLyBkaXNwbGF5IGZvciB0aGlzIG1vbnRoCgkJCQkJCXByaW50 RGF0ZS5zZXREYXRlKHByaW50RGF0ZS5nZXREYXRlKCkgKyAxKTsKCQkJCQkJcHJp bnREYXRlID0gdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QocHJpbnREYXRlKTsK CQkJCQl9CgkJCQkJY2FsZW5kZXIgKz0gdGJvZHkgKyAnPC90cj4nOwoJCQkJfQoJ CQkJZHJhd01vbnRoKys7CgkJCQlpZiAoZHJhd01vbnRoID4gMTEpIHsKCQkJCQlk cmF3TW9udGggPSAwOwoJCQkJCWRyYXdZZWFyKys7CgkJCQl9CgkJCQljYWxlbmRl ciArPSAnPC90Ym9keT48L3RhYmxlPicgKyAoaXNNdWx0aU1vbnRoID8gJzwvZGl2 PicgKyAKCQkJCQkJCSgobnVtTW9udGhzWzBdID4gMCAmJiBjb2wgPT0gbnVtTW9u dGhzWzFdLTEpID8gJzxkaXYgY2xhc3M9InVpLWRhdGVwaWNrZXItcm93LWJyZWFr Ij48L2Rpdj4nIDogJycpIDogJycpOwoJCQkJZ3JvdXAgKz0gY2FsZW5kZXI7CgkJ CX0KCQkJaHRtbCArPSBncm91cDsKCQl9CgkJaHRtbCArPSBidXR0b25QYW5lbCAr ICgkLmJyb3dzZXIubXNpZSAmJiBwYXJzZUludCgkLmJyb3dzZXIudmVyc2lvbiwx MCkgPCA3ICYmICFpbnN0LmlubGluZSA/CgkJCSc8aWZyYW1lIHNyYz0iamF2YXNj cmlwdDpmYWxzZTsiIGNsYXNzPSJ1aS1kYXRlcGlja2VyLWNvdmVyIiBmcmFtZWJv cmRlcj0iMCI+PC9pZnJhbWU+JyA6ICcnKTsKCQlpbnN0Ll9rZXlFdmVudCA9IGZh bHNlOwoJCXJldHVybiBodG1sOwoJfSwKCgkvKiBHZW5lcmF0ZSB0aGUgbW9udGgg YW5kIHllYXIgaGVhZGVyLiAqLwoJX2dlbmVyYXRlTW9udGhZZWFySGVhZGVyOiBm dW5jdGlvbihpbnN0LCBkcmF3TW9udGgsIGRyYXdZZWFyLCBtaW5EYXRlLCBtYXhE YXRlLAoJCQlzZWxlY3RlZERhdGUsIHNlY29uZGFyeSwgbW9udGhOYW1lcywgbW9u dGhOYW1lc1Nob3J0KSB7CgkJbWluRGF0ZSA9IChpbnN0LnJhbmdlU3RhcnQgJiYg bWluRGF0ZSAmJiBzZWxlY3RlZERhdGUgPCBtaW5EYXRlID8gc2VsZWN0ZWREYXRl IDogbWluRGF0ZSk7CgkJdmFyIGNoYW5nZU1vbnRoID0gdGhpcy5fZ2V0KGluc3Qs ICdjaGFuZ2VNb250aCcpOwoJCXZhciBjaGFuZ2VZZWFyID0gdGhpcy5fZ2V0KGlu c3QsICdjaGFuZ2VZZWFyJyk7CgkJdmFyIHNob3dNb250aEFmdGVyWWVhciA9IHRo aXMuX2dldChpbnN0LCAnc2hvd01vbnRoQWZ0ZXJZZWFyJyk7CgkJdmFyIGh0bWwg PSAnPGRpdiBjbGFzcz0idWktZGF0ZXBpY2tlci10aXRsZSI+JzsKCQl2YXIgbW9u dGhIdG1sID0gJyc7CgkJLy8gbW9udGggc2VsZWN0aW9uCgkJaWYgKHNlY29uZGFy eSB8fCAhY2hhbmdlTW9udGgpCgkJCW1vbnRoSHRtbCArPSAnPHNwYW4gY2xhc3M9 InVpLWRhdGVwaWNrZXItbW9udGgiPicgKyBtb250aE5hbWVzW2RyYXdNb250aF0g KyAnPC9zcGFuPiAnOwoJCWVsc2UgewoJCQl2YXIgaW5NaW5ZZWFyID0gKG1pbkRh dGUgJiYgbWluRGF0ZS5nZXRGdWxsWWVhcigpID09IGRyYXdZZWFyKTsKCQkJdmFy IGluTWF4WWVhciA9IChtYXhEYXRlICYmIG1heERhdGUuZ2V0RnVsbFllYXIoKSA9 PSBkcmF3WWVhcik7CgkJCW1vbnRoSHRtbCArPSAnPHNlbGVjdCBjbGFzcz0idWkt ZGF0ZXBpY2tlci1tb250aCIgJyArCgkJCQknb25jaGFuZ2U9IkRQX2pRdWVyeS5k YXRlcGlja2VyLl9zZWxlY3RNb250aFllYXIoXCcjJyArIGluc3QuaWQgKyAnXCcs IHRoaXMsIFwnTVwnKTsiICcgKwoJCQkJJ29uY2xpY2s9IkRQX2pRdWVyeS5kYXRl cGlja2VyLl9jbGlja01vbnRoWWVhcihcJyMnICsgaW5zdC5pZCArICdcJyk7Iicg KwoJCQkgCSc+JzsKCQkJZm9yICh2YXIgbW9udGggPSAwOyBtb250aCA8IDEyOyBt b250aCsrKSB7CgkJCQlpZiAoKCFpbk1pblllYXIgfHwgbW9udGggPj0gbWluRGF0 ZS5nZXRNb250aCgpKSAmJgoJCQkJCQkoIWluTWF4WWVhciB8fCBtb250aCA8PSBt YXhEYXRlLmdldE1vbnRoKCkpKQoJCQkJCW1vbnRoSHRtbCArPSAnPG9wdGlvbiB2 YWx1ZT0iJyArIG1vbnRoICsgJyInICsKCQkJCQkJKG1vbnRoID09IGRyYXdNb250 aCA/ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIicgOiAnJykgKwoJCQkJCQknPicgKyBt b250aE5hbWVzU2hvcnRbbW9udGhdICsgJzwvb3B0aW9uPic7CgkJCX0KCQkJbW9u dGhIdG1sICs9ICc8L3NlbGVjdD4nOwoJCX0KCQlpZiAoIXNob3dNb250aEFmdGVy WWVhcikKCQkJaHRtbCArPSBtb250aEh0bWwgKyAoKHNlY29uZGFyeSB8fCBjaGFu Z2VNb250aCB8fCBjaGFuZ2VZZWFyKSAmJiAoIShjaGFuZ2VNb250aCAmJiBjaGFu Z2VZZWFyKSkgPyAnJiN4YTA7JyA6ICcnKTsKCQkvLyB5ZWFyIHNlbGVjdGlvbgoJ CWlmIChzZWNvbmRhcnkgfHwgIWNoYW5nZVllYXIpCgkJCWh0bWwgKz0gJzxzcGFu IGNsYXNzPSJ1aS1kYXRlcGlja2VyLXllYXIiPicgKyBkcmF3WWVhciArICc8L3Nw YW4+JzsKCQllbHNlIHsKCQkJLy8gZGV0ZXJtaW5lIHJhbmdlIG9mIHllYXJzIHRv IGRpc3BsYXkKCQkJdmFyIHllYXJzID0gdGhpcy5fZ2V0KGluc3QsICd5ZWFyUmFu Z2UnKS5zcGxpdCgnOicpOwoJCQl2YXIgeWVhciA9IDA7CgkJCXZhciBlbmRZZWFy ID0gMDsKCQkJaWYgKHllYXJzLmxlbmd0aCAhPSAyKSB7CgkJCQl5ZWFyID0gZHJh d1llYXIgLSAxMDsKCQkJCWVuZFllYXIgPSBkcmF3WWVhciArIDEwOwoJCQl9IGVs c2UgaWYgKHllYXJzWzBdLmNoYXJBdCgwKSA9PSAnKycgfHwgeWVhcnNbMF0uY2hh ckF0KDApID09ICctJykgewoJCQkJeWVhciA9IGRyYXdZZWFyICsgcGFyc2VJbnQo eWVhcnNbMF0sIDEwKTsKCQkJCWVuZFllYXIgPSBkcmF3WWVhciArIHBhcnNlSW50 KHllYXJzWzFdLCAxMCk7CgkJCX0gZWxzZSB7CgkJCQl5ZWFyID0gcGFyc2VJbnQo eWVhcnNbMF0sIDEwKTsKCQkJCWVuZFllYXIgPSBwYXJzZUludCh5ZWFyc1sxXSwg MTApOwoJCQl9CgkJCXllYXIgPSAobWluRGF0ZSA/IE1hdGgubWF4KHllYXIsIG1p bkRhdGUuZ2V0RnVsbFllYXIoKSkgOiB5ZWFyKTsKCQkJZW5kWWVhciA9IChtYXhE YXRlID8gTWF0aC5taW4oZW5kWWVhciwgbWF4RGF0ZS5nZXRGdWxsWWVhcigpKSA6 IGVuZFllYXIpOwoJCQlodG1sICs9ICc8c2VsZWN0IGNsYXNzPSJ1aS1kYXRlcGlj a2VyLXllYXIiICcgKwoJCQkJJ29uY2hhbmdlPSJEUF9qUXVlcnkuZGF0ZXBpY2tl ci5fc2VsZWN0TW9udGhZZWFyKFwnIycgKyBpbnN0LmlkICsgJ1wnLCB0aGlzLCBc J1lcJyk7IiAnICsKCQkJCSdvbmNsaWNrPSJEUF9qUXVlcnkuZGF0ZXBpY2tlci5f Y2xpY2tNb250aFllYXIoXCcjJyArIGluc3QuaWQgKyAnXCcpOyInICsKCQkJCSc+ JzsKCQkJZm9yICg7IHllYXIgPD0gZW5kWWVhcjsgeWVhcisrKSB7CgkJCQlodG1s ICs9ICc8b3B0aW9uIHZhbHVlPSInICsgeWVhciArICciJyArCgkJCQkJKHllYXIg PT0gZHJhd1llYXIgPyAnIHNlbGVjdGVkPSJzZWxlY3RlZCInIDogJycpICsKCQkJ CQknPicgKyB5ZWFyICsgJzwvb3B0aW9uPic7CgkJCX0KCQkJaHRtbCArPSAnPC9z ZWxlY3Q+JzsKCQl9CgkJaWYgKHNob3dNb250aEFmdGVyWWVhcikKCQkJaHRtbCAr PSAoc2Vjb25kYXJ5IHx8IGNoYW5nZU1vbnRoIHx8IGNoYW5nZVllYXIgPyAnJiN4 YTA7JyA6ICcnKSArIG1vbnRoSHRtbDsKCQlodG1sICs9ICc8L2Rpdj4nOyAvLyBD bG9zZSBkYXRlcGlja2VyX2hlYWRlcgoJCXJldHVybiBodG1sOwoJfSwKCgkvKiBB ZGp1c3Qgb25lIG9mIHRoZSBkYXRlIHN1Yi1maWVsZHMuICovCglfYWRqdXN0SW5z dERhdGU6IGZ1bmN0aW9uKGluc3QsIG9mZnNldCwgcGVyaW9kKSB7CgkJdmFyIHll YXIgPSBpbnN0LmRyYXdZZWFyICsgKHBlcmlvZCA9PSAnWScgPyBvZmZzZXQgOiAw KTsKCQl2YXIgbW9udGggPSBpbnN0LmRyYXdNb250aCArIChwZXJpb2QgPT0gJ00n ID8gb2Zmc2V0IDogMCk7CgkJdmFyIGRheSA9IE1hdGgubWluKGluc3Quc2VsZWN0 ZWREYXksIHRoaXMuX2dldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSkgKwoJCQko cGVyaW9kID09ICdEJyA/IG9mZnNldCA6IDApOwoJCXZhciBkYXRlID0gdGhpcy5f ZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoeWVhciwgbW9udGgsIGRheSkp OwoJCS8vIGVuc3VyZSBpdCBpcyB3aXRoaW4gdGhlIGJvdW5kcyBzZXQKCQl2YXIg bWluRGF0ZSA9IHRoaXMuX2dldE1pbk1heERhdGUoaW5zdCwgJ21pbicsIHRydWUp OwoJCXZhciBtYXhEYXRlID0gdGhpcy5fZ2V0TWluTWF4RGF0ZShpbnN0LCAnbWF4 Jyk7CgkJZGF0ZSA9IChtaW5EYXRlICYmIGRhdGUgPCBtaW5EYXRlID8gbWluRGF0 ZSA6IGRhdGUpOwoJCWRhdGUgPSAobWF4RGF0ZSAmJiBkYXRlID4gbWF4RGF0ZSA/ IG1heERhdGUgOiBkYXRlKTsKCQlpbnN0LnNlbGVjdGVkRGF5ID0gZGF0ZS5nZXRE YXRlKCk7CgkJaW5zdC5kcmF3TW9udGggPSBpbnN0LnNlbGVjdGVkTW9udGggPSBk YXRlLmdldE1vbnRoKCk7CgkJaW5zdC5kcmF3WWVhciA9IGluc3Quc2VsZWN0ZWRZ ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpOwoJCWlmIChwZXJpb2QgPT0gJ00nIHx8 IHBlcmlvZCA9PSAnWScpCgkJCXRoaXMuX25vdGlmeUNoYW5nZShpbnN0KTsKCX0s CgoJLyogTm90aWZ5IGNoYW5nZSBvZiBtb250aC95ZWFyLiAqLwoJX25vdGlmeUNo YW5nZTogZnVuY3Rpb24oaW5zdCkgewoJCXZhciBvbkNoYW5nZSA9IHRoaXMuX2dl dChpbnN0LCAnb25DaGFuZ2VNb250aFllYXInKTsKCQlpZiAob25DaGFuZ2UpCgkJ CW9uQ2hhbmdlLmFwcGx5KChpbnN0LmlucHV0ID8gaW5zdC5pbnB1dFswXSA6IG51 bGwpLAoJCQkJW2luc3Quc2VsZWN0ZWRZZWFyLCBpbnN0LnNlbGVjdGVkTW9udGgg KyAxLCBpbnN0XSk7Cgl9LAoKCS8qIERldGVybWluZSB0aGUgbnVtYmVyIG9mIG1v bnRocyB0byBzaG93LiAqLwoJX2dldE51bWJlck9mTW9udGhzOiBmdW5jdGlvbihp bnN0KSB7CgkJdmFyIG51bU1vbnRocyA9IHRoaXMuX2dldChpbnN0LCAnbnVtYmVy T2ZNb250aHMnKTsKCQlyZXR1cm4gKG51bU1vbnRocyA9PSBudWxsID8gWzEsIDFd IDogKHR5cGVvZiBudW1Nb250aHMgPT0gJ251bWJlcicgPyBbMSwgbnVtTW9udGhz XSA6IG51bU1vbnRocykpOwoJfSwKCgkvKiBEZXRlcm1pbmUgdGhlIGN1cnJlbnQg bWF4aW11bSBkYXRlIC0gZW5zdXJlIG5vIHRpbWUgY29tcG9uZW50cyBhcmUgc2V0 IC0gbWF5IGJlIG92ZXJyaWRkZW4gZm9yIGEgcmFuZ2UuICovCglfZ2V0TWluTWF4 RGF0ZTogZnVuY3Rpb24oaW5zdCwgbWluTWF4LCBjaGVja1JhbmdlKSB7CgkJdmFy IGRhdGUgPSB0aGlzLl9kZXRlcm1pbmVEYXRlKHRoaXMuX2dldChpbnN0LCBtaW5N YXggKyAnRGF0ZScpLCBudWxsKTsKCQlyZXR1cm4gKCFjaGVja1JhbmdlIHx8ICFp bnN0LnJhbmdlU3RhcnQgPyBkYXRlIDoKCQkJKCFkYXRlIHx8IGluc3QucmFuZ2VT dGFydCA+IGRhdGUgPyBpbnN0LnJhbmdlU3RhcnQgOiBkYXRlKSk7Cgl9LAoKCS8q IEZpbmQgdGhlIG51bWJlciBvZiBkYXlzIGluIGEgZ2l2ZW4gbW9udGguICovCglf Z2V0RGF5c0luTW9udGg6IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7CgkJcmV0dXJu IDMyIC0gbmV3IERhdGUoeWVhciwgbW9udGgsIDMyKS5nZXREYXRlKCk7Cgl9LAoK CS8qIEZpbmQgdGhlIGRheSBvZiB0aGUgd2VlayBvZiB0aGUgZmlyc3Qgb2YgYSBt b250aC4gKi8KCV9nZXRGaXJzdERheU9mTW9udGg6IGZ1bmN0aW9uKHllYXIsIG1v bnRoKSB7CgkJcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKS5nZXREYXko KTsKCX0sCgoJLyogRGV0ZXJtaW5lcyBpZiB3ZSBzaG91bGQgYWxsb3cgYSAibmV4 dC9wcmV2IiBtb250aCBkaXNwbGF5IGNoYW5nZS4gKi8KCV9jYW5BZGp1c3RNb250 aDogZnVuY3Rpb24oaW5zdCwgb2Zmc2V0LCBjdXJZZWFyLCBjdXJNb250aCkgewoJ CXZhciBudW1Nb250aHMgPSB0aGlzLl9nZXROdW1iZXJPZk1vbnRocyhpbnN0KTsK CQl2YXIgZGF0ZSA9IHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRl KAoJCQljdXJZZWFyLCBjdXJNb250aCArIChvZmZzZXQgPCAwID8gb2Zmc2V0IDog bnVtTW9udGhzWzFdKSwgMSkpOwoJCWlmIChvZmZzZXQgPCAwKQoJCQlkYXRlLnNl dERhdGUodGhpcy5fZ2V0RGF5c0luTW9udGgoZGF0ZS5nZXRGdWxsWWVhcigpLCBk YXRlLmdldE1vbnRoKCkpKTsKCQlyZXR1cm4gdGhpcy5faXNJblJhbmdlKGluc3Qs IGRhdGUpOwoJfSwKCgkvKiBJcyB0aGUgZ2l2ZW4gZGF0ZSBpbiB0aGUgYWNjZXB0 ZWQgcmFuZ2U/ICovCglfaXNJblJhbmdlOiBmdW5jdGlvbihpbnN0LCBkYXRlKSB7 CgkJLy8gZHVyaW5nIHJhbmdlIHNlbGVjdGlvbiwgdXNlIG1pbmltdW0gb2Ygc2Vs ZWN0ZWQgZGF0ZSBhbmQgcmFuZ2Ugc3RhcnQKCQl2YXIgbmV3TWluRGF0ZSA9ICgh aW5zdC5yYW5nZVN0YXJ0ID8gbnVsbCA6IHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRq dXN0KAoJCQluZXcgRGF0ZShpbnN0LnNlbGVjdGVkWWVhciwgaW5zdC5zZWxlY3Rl ZE1vbnRoLCBpbnN0LnNlbGVjdGVkRGF5KSkpOwoJCW5ld01pbkRhdGUgPSAobmV3 TWluRGF0ZSAmJiBpbnN0LnJhbmdlU3RhcnQgPCBuZXdNaW5EYXRlID8gaW5zdC5y YW5nZVN0YXJ0IDogbmV3TWluRGF0ZSk7CgkJdmFyIG1pbkRhdGUgPSBuZXdNaW5E YXRlIHx8IHRoaXMuX2dldE1pbk1heERhdGUoaW5zdCwgJ21pbicpOwoJCXZhciBt YXhEYXRlID0gdGhpcy5fZ2V0TWluTWF4RGF0ZShpbnN0LCAnbWF4Jyk7CgkJcmV0 dXJuICgoIW1pbkRhdGUgfHwgZGF0ZSA+PSBtaW5EYXRlKSAmJiAoIW1heERhdGUg fHwgZGF0ZSA8PSBtYXhEYXRlKSk7Cgl9LAoKCS8qIFByb3ZpZGUgdGhlIGNvbmZp Z3VyYXRpb24gc2V0dGluZ3MgZm9yIGZvcm1hdHRpbmcvcGFyc2luZy4gKi8KCV9n ZXRGb3JtYXRDb25maWc6IGZ1bmN0aW9uKGluc3QpIHsKCQl2YXIgc2hvcnRZZWFy Q3V0b2ZmID0gdGhpcy5fZ2V0KGluc3QsICdzaG9ydFllYXJDdXRvZmYnKTsKCQlz aG9ydFllYXJDdXRvZmYgPSAodHlwZW9mIHNob3J0WWVhckN1dG9mZiAhPSAnc3Ry aW5nJyA/IHNob3J0WWVhckN1dG9mZiA6CgkJCW5ldyBEYXRlKCkuZ2V0RnVsbFll YXIoKSAlIDEwMCArIHBhcnNlSW50KHNob3J0WWVhckN1dG9mZiwgMTApKTsKCQly ZXR1cm4ge3Nob3J0WWVhckN1dG9mZjogc2hvcnRZZWFyQ3V0b2ZmLAoJCQlkYXlO YW1lc1Nob3J0OiB0aGlzLl9nZXQoaW5zdCwgJ2RheU5hbWVzU2hvcnQnKSwgZGF5 TmFtZXM6IHRoaXMuX2dldChpbnN0LCAnZGF5TmFtZXMnKSwKCQkJbW9udGhOYW1l c1Nob3J0OiB0aGlzLl9nZXQoaW5zdCwgJ21vbnRoTmFtZXNTaG9ydCcpLCBtb250 aE5hbWVzOiB0aGlzLl9nZXQoaW5zdCwgJ21vbnRoTmFtZXMnKX07Cgl9LAoKCS8q IEZvcm1hdCB0aGUgZ2l2ZW4gZGF0ZSBmb3IgZGlzcGxheS4gKi8KCV9mb3JtYXRE YXRlOiBmdW5jdGlvbihpbnN0LCBkYXksIG1vbnRoLCB5ZWFyKSB7CgkJaWYgKCFk YXkpIHsKCQkJaW5zdC5jdXJyZW50RGF5ID0gaW5zdC5zZWxlY3RlZERheTsKCQkJ aW5zdC5jdXJyZW50TW9udGggPSBpbnN0LnNlbGVjdGVkTW9udGg7CgkJCWluc3Qu Y3VycmVudFllYXIgPSBpbnN0LnNlbGVjdGVkWWVhcjsKCQl9CgkJdmFyIGRhdGUg PSAoZGF5ID8gKHR5cGVvZiBkYXkgPT0gJ29iamVjdCcgPyBkYXkgOgoJCQl0aGlz Ll9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5 KSkpIDoKCQkJdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoaW5z dC5jdXJyZW50WWVhciwgaW5zdC5jdXJyZW50TW9udGgsIGluc3QuY3VycmVudERh eSkpKTsKCQlyZXR1cm4gdGhpcy5mb3JtYXREYXRlKHRoaXMuX2dldChpbnN0LCAn ZGF0ZUZvcm1hdCcpLCBkYXRlLCB0aGlzLl9nZXRGb3JtYXRDb25maWcoaW5zdCkp OwoJfQp9KTsKCi8qIGpRdWVyeSBleHRlbmQgbm93IGlnbm9yZXMgbnVsbHMhICov CmZ1bmN0aW9uIGV4dGVuZFJlbW92ZSh0YXJnZXQsIHByb3BzKSB7CgkkLmV4dGVu ZCh0YXJnZXQsIHByb3BzKTsKCWZvciAodmFyIG5hbWUgaW4gcHJvcHMpCgkJaWYg KHByb3BzW25hbWVdID09IG51bGwgfHwgcHJvcHNbbmFtZV0gPT0gdW5kZWZpbmVk KQoJCQl0YXJnZXRbbmFtZV0gPSBwcm9wc1tuYW1lXTsKCXJldHVybiB0YXJnZXQ7 Cn07CgovKiBEZXRlcm1pbmUgd2hldGhlciBhbiBvYmplY3QgaXMgYW4gYXJyYXku ICovCmZ1bmN0aW9uIGlzQXJyYXkoYSkgewoJcmV0dXJuIChhICYmICgoJC5icm93 c2VyLnNhZmFyaSAmJiB0eXBlb2YgYSA9PSAnb2JqZWN0JyAmJiBhLmxlbmd0aCkg fHwKCQkoYS5jb25zdHJ1Y3RvciAmJiBhLmNvbnN0cnVjdG9yLnRvU3RyaW5nKCku bWF0Y2goL1xBcnJheVwoXCkvKSkpKTsKfTsKCi8qIEludm9rZSB0aGUgZGF0ZXBp Y2tlciBmdW5jdGlvbmFsaXR5LgogICBAcGFyYW0gIG9wdGlvbnMgIHN0cmluZyAt IGEgY29tbWFuZCwgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhZGRpdGlvbmFsIHBh cmFtZXRlcnMgb3IKICAgICAgICAgICAgICAgICAgICBPYmplY3QgLSBzZXR0aW5n cyBmb3IgYXR0YWNoaW5nIG5ldyBkYXRlcGlja2VyIGZ1bmN0aW9uYWxpdHkKICAg QHJldHVybiAgalF1ZXJ5IG9iamVjdCAqLwokLmZuLmRhdGVwaWNrZXIgPSBmdW5j dGlvbihvcHRpb25zKXsKCgkvKiBJbml0aWFsaXNlIHRoZSBkYXRlIHBpY2tlci4g Ki8KCWlmICghJC5kYXRlcGlja2VyLmluaXRpYWxpemVkKSB7CgkJJChkb2N1bWVu dCkubW91c2Vkb3duKCQuZGF0ZXBpY2tlci5fY2hlY2tFeHRlcm5hbENsaWNrKS4K CQkJZmluZCgnYm9keScpLmFwcGVuZCgkLmRhdGVwaWNrZXIuZHBEaXYpOwoJCSQu ZGF0ZXBpY2tlci5pbml0aWFsaXplZCA9IHRydWU7Cgl9CgoJdmFyIG90aGVyQXJn cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7Cglp ZiAodHlwZW9mIG9wdGlvbnMgPT0gJ3N0cmluZycgJiYgKG9wdGlvbnMgPT0gJ2lz RGlzYWJsZWQnIHx8IG9wdGlvbnMgPT0gJ2dldERhdGUnKSkKCQlyZXR1cm4gJC5k YXRlcGlja2VyWydfJyArIG9wdGlvbnMgKyAnRGF0ZXBpY2tlciddLgoJCQlhcHBs eSgkLmRhdGVwaWNrZXIsIFt0aGlzWzBdXS5jb25jYXQob3RoZXJBcmdzKSk7Cglp ZiAob3B0aW9ucyA9PSAnb3B0aW9uJyAmJiBhcmd1bWVudHMubGVuZ3RoID09IDIg JiYgdHlwZW9mIGFyZ3VtZW50c1sxXSA9PSAnc3RyaW5nJykKCQlyZXR1cm4gJC5k YXRlcGlja2VyWydfJyArIG9wdGlvbnMgKyAnRGF0ZXBpY2tlciddLgoJCQlhcHBs eSgkLmRhdGVwaWNrZXIsIFt0aGlzWzBdXS5jb25jYXQob3RoZXJBcmdzKSk7Cgly ZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCXR5cGVvZiBvcHRpb25zID09 ICdzdHJpbmcnID8KCQkJJC5kYXRlcGlja2VyWydfJyArIG9wdGlvbnMgKyAnRGF0 ZXBpY2tlciddLgoJCQkJYXBwbHkoJC5kYXRlcGlja2VyLCBbdGhpc10uY29uY2F0 KG90aGVyQXJncykpIDoKCQkJJC5kYXRlcGlja2VyLl9hdHRhY2hEYXRlcGlja2Vy KHRoaXMsIG9wdGlvbnMpOwoJfSk7Cn07CgokLmRhdGVwaWNrZXIgPSBuZXcgRGF0 ZXBpY2tlcigpOyAvLyBzaW5nbGV0b24gaW5zdGFuY2UKJC5kYXRlcGlja2VyLmlu aXRpYWxpemVkID0gZmFsc2U7CiQuZGF0ZXBpY2tlci51dWlkID0gbmV3IERhdGUo KS5nZXRUaW1lKCk7CiQuZGF0ZXBpY2tlci52ZXJzaW9uID0gIjEuNy4yIjsKCi8v IFdvcmthcm91bmQgZm9yICM0MDU1Ci8vIEFkZCBhbm90aGVyIGdsb2JhbCB0byBh dm9pZCBub0NvbmZsaWN0IGlzc3VlcyB3aXRoIGlubGluZSBldmVudCBoYW5kbGVy cwp3aW5kb3cuRFBfalF1ZXJ5ID0gJDsKCn0pKGpRdWVyeSk7Cg== ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline; filename=ui.datepicker-ca.js Content-Type: application/x-javascript; charset=iso-8859-1; name=ui.datepicker-ca.js Content-Location: http://bop.diba.es/js/datepicker/development-bundle/ui/i18n/ui.datepicker-ca.js Content-Transfer-Encoding: Base64 LyogSW5pY2lhbGl0emFjae+/vSBlbiBjYXRhbO+/vSBwZXIgYSBsJ2V4dGVuY2nv v70gJ2NhbGVuZGFyJyBwZXIgalF1ZXJ5LiAqLwovKiBXcml0ZXJzOiAoam9hbi5s ZW9uQGdtYWlsLmNvbSkuICovCmpRdWVyeShmdW5jdGlvbigkKXsKCSQuZGF0ZXBp Y2tlci5yZWdpb25hbFsnY2EnXSA9IHsKCQljbG9zZVRleHQ6ICdUYW5jYXInLAoJ CXByZXZUZXh0OiAnJiN4M2M7QW50JywKCQluZXh0VGV4dDogJ1NlZyYjeDNlOycs CgkJY3VycmVudFRleHQ6ICdBdnVpJywKCQltb250aE5hbWVzOiBbJ0dlbmVyJywn RmVicmVyJywnTWFyJmNjZWRpbDsnLCdBYnJpbCcsJ01haWcnLCdKdW55JywKCQkn SnVsaW9sJywnQWdvc3QnLCdTZXRlbWJyZScsJ09jdHVicmUnLCdOb3ZlbWJyZScs J0Rlc2VtYnJlJ10sCgkJbW9udGhOYW1lc1Nob3J0OiBbJ0dlbicsJ0ZlYicsJ01h cicsJ0FicicsJ01haScsJ0p1bicsCgkJJ0p1bCcsJ0FnbycsJ1NldCcsJ09jdCcs J05vdicsJ0RlcyddLAoJCWRheU5hbWVzOiBbJ0RpdW1lbmdlJywnRGlsbHVucycs J0RpbWFydHMnLCdEaW1lY3JlcycsJ0Rpam91cycsJ0RpdmVuZHJlcycsJ0Rpc3Nh YnRlJ10sCgkJZGF5TmFtZXNTaG9ydDogWydEdWcnLCdEbG4nLCdEbXQnLCdEbWMn LCdEanMnLCdEdm4nLCdEc2InXSwKCQlkYXlOYW1lc01pbjogWydEZycsJ0RsJywn RHQnLCdEYycsJ0RqJywnRHYnLCdEcyddLAoJCWRhdGVGb3JtYXQ6ICdtbS9kZC95 eScsIGZpcnN0RGF5OiAwLAoJCWlzUlRMOiBmYWxzZX07CgkkLmRhdGVwaWNrZXIu c2V0RGVmYXVsdHMoJC5kYXRlcGlja2VyLnJlZ2lvbmFsWydjYSddKTsKfSk7 ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline Content-Type: text/css; charset=iso-8859-1 Content-Location: http://bop.diba.es/css/reset.css Content-Transfer-Encoding: 8bit /*-----------RESET styles----------*/ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td { margin: 0; padding: 0; border: 0; outline: 0; font-size: 100%; vertical-align: baseline; background: transparent; } body { line-height: 1; } ol, ul { list-style: none; } blockquote, q { quotes: none; } :focus { outline: 0; } ins { text-decoration: none; } del { text-decoration: line-through; } table { border-collapse: collapse; border-spacing: 0; } /*-----------fi RESET styles----------*/ ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline Content-Type: text/css; charset=utf-8 Content-Location: http://bop.diba.es/css/formularis.css Content-Transfer-Encoding: 8bit @charset "utf-8"; /*::::::::::::::: FORMULARIS ::::::::::::::*/ /*:::: DRETA :::::*/ #dreta form { font-size:100%; width:85%!important; } #dreta form input{ font-family:Verdana, Geneva, sans-serif; color:#999; border:1px #CCC solid; } #dreta form a{ border:0px!important; } #dreta form a:hover{ border-bottom:1px solid!important; } /*:::: CENTRE :::::*/ #centre form, #centre_fit form { margin-top:20px; margin-bottom:10px; background-image:url(../img/form2.gif); background-repeat:no-repeat; border-bottom:1px solid #999; background-color:#fff; padding:20px 15px 15px 15px; } #centre form p, #centre_fit form p{ text-align:left; } #centre fieldset, #centre_fit fieldset { margin-bottom:20px; margin-top:15px; border-top:1px #ccc dashed; border-bottom:0px; border-left:0px; border-right:0px; padding:8px; } #centre fieldset fieldset, #centre_fit fieldset fieldset{ margin-bottom:0px; margin-top:0px; margin-left:0px; border:0px; } #centre fieldset fieldset legend, #centre_fit fieldset fieldset legend{ font-family:Verdana, Geneva, sans-serif; font-size:100%; font-weight:bold; color:#404040; margin-top:10px; margin-bottom:10px; margin-left:-8px; background-color:#FFFFFF; border:0px; } #centre legend, #centre_fit legend { font-family:Verdana, Geneva, sans-serif; font-size:100%; font-weight:bold; color:#404040; margin-top:0px; margin-bottom:5px; margin-left:0px; background-color:#f2f2f2; border-left:1px #CCCCCC solid; border-right:1px #CCCCCC solid; height:20px; padding-left:4px; padding-right:4px; } #centre label, #centre_fit label { font-family:Verdana, Geneva, sans-serif; font-size:100%; color:#404040; line-height:2em; display:compact; } #centre input, #centre_fit input{ font-family:Verdana, Geneva, sans-serif; font-size:100%; color:#891536; border-color:#CCC; border-width:1px; } #centre textarea, #centre_fit textarea{ font-family:Verdana, Geneva, sans-serif; font-size:100%; color:#891536; border:1px #CCC solid; margin:0 0 15px 0; } #centre select, #centre_fit select{ font-family:Verdana, Geneva, sans-serif; font-size:100%; color:#891536; border:1px #CCC solid; margin:0 0 15px 0; } input#submit{ color:#891536; border:1px #848484 solid; background:#FFF; width:auto; margin:5px 5px 0 0px; cursor:pointer; } input#reset{ color:#891536; border:1px #848484 solid; background:#FFF; width:auto; margin:5px 5px 0 0px; cursor:pointer; } /*::::::::::::::: FI FORMULARIS ::::::::::::::*/ ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline Content-Type: text/css; charset=iso-8859-1 Content-Location: http://bop.diba.es/css/taules.css Content-Transfer-Encoding: 8bit /* Estils per a Taules */ table{ border:1px #d9d9d9 solid!important; overflow:hidden; position:relative; } /*::::::::: AMPLADA TAULES :::::::::::*/ /*40%*/ .t40{ width:40%; } /*60%*/ .t60{ width:60%; } /*72%*/ .t72{ width:72%; } /*100%*/ .t100{ width:99%; } /*::::::::: FI AMPLADA TAULES :::::::::::*/ /*::::::::: AMPLADA COLUMNES :::::::::::*/ .tc5{ width:5%; } .tc10{ width:10%; } .tc15{ width:15%; } .tc20{ width:20%; } .tc25{ width:25%; } .tc30{ width:30%; } .tc35{ width:35%; } .tc40{ width:40%; } .tc45{ width:45%; } .tc50{ width:50%; } .tc55{ width:55%; } .tc60{ width:60%; } .tc65{ width:65%; } .tc70{ width:70%; } .tc75{ width:75%; } .tc80{ width:80%; } .tc85{ width:85%; } .tc90{ width:90%; } .tc95{ width:95%; } /*::::::::: FI AMPLADA COLUMNES :::::::::::*/ /* aliniar columnes*/ colgroup .dades{ text-align:center; } /* FI aliniar columnes*/ colgroup .data{ font-weight:bold; } caption{ font-size:100%; border-left:1px #d9d9d9 solid!important; border-top:1px #d9d9d9 solid!important; border-right:1px #d9d9d9 solid!important; background-color:#f3f3f3!important; padding-left:8px!important; padding-right:8px!important; padding-top:2px!important; } tr{ height:20px; } tr:hover{ background-color:#FCDADB; } th{ font-size:100%!important; border-right:1px #d9d9d9 solid!important; border-bottom:1px #d9d9d9 solid!important; border-left:0px; border-top:0px; vertical-align:middle; padding-left:8px!important; padding-right:8px!important; padding-top:2px!important; background-color:#f3f3f3!important; height:22px; } td{ border-right:1px #d9d9d9 dotted!important; border-bottom:1px #d9d9d9 dotted!important; border-left:0px; border-top:0px; font-size:100%!important; padding:5px!important; } td a{ border:0px!important; } .col60x100{ width:360px; } .col20x100{ width:120px; } #centre table td a, #centre_fit table td a{ font-size:100%; } ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline Content-Type: text/css; charset=iso-8859-1 Content-Location: http://bop.diba.es/css/llistes.css Content-Transfer-Encoding: 8bit /* Estils per a llistes definicions */ /*:::::::::: AMPLADA LLISTES ::::::::::::*/ .l40{ width:40%; } .l60{ width:60%; } .l72{ width:72%; } .l100{ width:100%; } /*:::::::::: FI AMPLADA LLISTES ::::::::::::*/ #centre dl, #centre_fit dl { font-family:Verdana, Arial, Helvetica, sans-serif; font-size:100%; color:#606060; border-left:1px solid #d9d9d9; border-right:1px solid #d9d9d9; border-bottom:1px solid #d9d9d9; margin-bottom:10px; /*:::::::::::::Al fitxer ie.css hi ha els estils de llistes per IE6:::::::::::::::::::::::*/ overflow:hidden; } #centre dl dt, #centre_fit dl dt { background-color:#f3f3f3; font-weight:bold; padding:4px; border-top:1px solid #d9d9d9; border-bottom:1px solid #d9d9d9; /*border-left:1px solid #d9d9d9; border-right:1px solid #d9d9d9; */ overflow:hidden; } #centre dl dt em a, #centre_fit dl dt em a{ font-size:100%; } #centre dl dt a, #centre_fit dl dt a{ font-size:100%; } #centre dl dd, #centre_fit dl dd { padding: 10px 5px 20px 10px; line-height:1.4em; /*border-left:1px solid #d9d9d9; border-right:1px solid #d9d9d9;*/ border-bottom:1px solid #ffffff; /* background-color:#f2f2f2;*/ background-image:url(../img/fons_llistes.gif); background-repeat:repeat-x; background-position:bottom; } #centre dl dd p, #centre_fit dl dd p { font-size:100%!important; } #centre dl dd h1, #centre_fit dl dd h1 { font-size:100%!important; } #centre dl dd h2, #centre_fit dl dd h2 { font-size:100%!important; } #centre dl dd h3, #centre_fit dl dd h3 { font-size:100%!important; } #centre dl dd h4, #centre_fit dl dd h4 { font-size:100%!important; } #centre dl dd h5, #centre_fit dl dd h5 { font-size:100%!important; } #centre dl dd h6, #centre_fit dl dd h6 { font-size:100%!important; } /*:::::::: maquetació llistes municipis::::::*/ dt.mcpis, dt.mcpis2{ border:0px!important; display: inline; background-color:#FFFFFF!important; } dl.mcpis, dl.mcpis2 { border: 0px!important; display: inline; } dd.mcpis, dd.mcpis2 { border: 0px!important; display: inline; background-image:none!important; } dt.smarc { border: 0px!important; background-color:#fff!important; } dl.smarc { border: 0px!important; } dt.smarc img{ float:right; width:200px; background-color:#006666; } dd.smarc { padding: 0!important; margin: 0!important; width: 58%!important; background-image:none!important; margin-top:10px; } dl.bibl { width: 20%; float: left; margin-right: 5px; } dt.bibl { background-color:#f3f3f3!important; text-align: center; } dt.bibl img{ float:right; width:200px; background-color:#006666; } dd.bibl { padding: 0!important; margin: 0!important; background-image:none!important; margin-top:10px; text-align: center; } dl.columnes { color: #666666; margin: 1em 0 0 0; border-top:0; border-left:0; border-right:0; border-bottom:0; text-decoration: none; width:100%; } dt.columnes { background-color:#ffffff; color: #666666; margin: 0em 0em 0em 0.5em; padding: 0em 0em 0.3em 0em; border-top:1px solid #d9d9d9; border-left:1px solid #d9d9d9; border-right:1px solid #d9d9d9; border-bottom:1px solid #d9d9d9; position: relative; } dd.columnes { position: relative; color: #666666; margin: 0em 0em 0em 6.65em; padding: 0em 1em 0.3em 0em; border-top:1px solid #d9d9d9; border-left:1px solid #d9d9d9; border-right:1px solid #d9d9d9; border-bottom:1px solid #d9d9d9; } dl.columneshorari { color: #66666; margin: 0 0 0 0; padding: 0 0 0 0; border: 0; font-size: 1em; text-decoration: none; width:100%; } .columneshorari dt { color: #999999; position: relative; margin: 0em 0em 0em 0em; padding: 0em 0em 0em 0em; text-align: left; font-weight:normal!important; } .columneshorari dd { color: #000000; margin: 0em 0em 0em 0.5em; padding: 0em 1em 0.3em 0em; text-align: left; } ul.menutop { font-size: 1.1em; margin: 0.3em 0 0.3em 0em; padding: 0 0 0 0em; background-color: #FFFFFF; } ul.menutop li { color: #666666; font-weight: bold; font-size: 1em; margin: 0 0 0 0; padding: 0 0 0 0; display: inline; list-style: none; text-decoration: none; } ul.menutop li a, .menutop li a:visited, .menutop li a:active{ color: #666666; font-size: 1em; margin: 0 0 0 0; padding: 0 0 0 0; display: inline; list-style: none; text-decoration: none; font-weight: bold; } ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline Content-Type: image/gif Content-Location: http://bop.diba.es/img/background2.gif Content-Transfer-Encoding: Base64 R0lGODlhAwADAIAAAMTExI2NjSH5BAAAAAAALAAAAAADAAMAAAIERB5mBQA7 ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline Content-Type: image/gif Content-Location: http://bop.diba.es/img/background_esq.gif Content-Transfer-Encoding: Base64 R0lGODlh8wABAJEAAPHx8eLi4rKysvLy8iH5BAAAAAAALAAAAADzAAEAAAIPnI+p y+0Po5y02otzEwEUADs= ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline Content-Type: image/png Content-Location: http://bop.diba.es/img/ombra3.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAA9IAAAABCAYAAAAy0ZbCAAAAGXRFWHRTb2Z0d2Fy ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAE1JREFUeNrsy0EKQFAYReH/8RKRpVmw ZYlI9JyBDRiq89WZ3Lo5IiqqKVNDLXXU00BjKWUOSZIkSZJ+JqU0fbwctNBKG+3v dtJF9yPAAE4SDQdxhDf+AAAAAElFTkSuQmCC ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline Content-Type: image/gif Content-Location: http://bop.diba.es/img/background_logo.gif Content-Transfer-Encoding: Base64 R0lGODlhwAMqAOYAANvb2/7+/v39/fz8/Pr6+vv7++jo6Ofn5/j4+Onp6fn5+ff3 9+rq6vb29uzs7PPz8/T09O3t7evr6/Dw8O7u7vX19e/v7/Hx8fLy8tra2sjIyLq6 utTU1Ly8vKWlpbm5ubS0tMDAwJiYmL29vba2tq+vr7+/v7W1tb6+vpubm6ysrLe3 t6mpqa2tra6urp6enrCwsLu7u6Ojo6Kioqurq8XFxZmZmbi4uKSkpMTExLKyssHB wZeXl5+fn6enp5ycnJqamsbGxsLCwqioqKCgoKamprOzs52dnaqqqsPDw7GxscfH x6GhodfX19DQ0NjY2JaWltnZ2crKyuDg4OPj4+Xl5d7e3uHh4ebm5tzc3OLi4uTk 5N/f393d3f///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACwAAAAAwAMqAAAH/4BegoOEhYaHiImKi4yNjo+QkZKTlJWW XgEBmJmbmgKfXp8CoaADpl6mA6gFBV6srawEXgS0swoKXre4twheCL++CwtewsMN x17HFV4VzcwQEF7Q0Q/VXtUPXhjb2hcXXt7fE+NeExYWXufoFOxeFBERXvDxDvVe 9RJeEvteDP79/xII9JLAgAEvBg8eWOhlIRYvWCJ6qUIxAMUqXrZozLiFihcqID9S 0eJFi8kAWq5c8aJy5ZUpU7zAjDmFCxcvNrkE4GLFipeePoF66UJ0aNEuWbIESJrF C1OnAAB4iSqV6tSoAaxqjXq1KleqWb+K9Uq2a9iyW9FiTdu1bdqzbv/HxgUAl63d tXLvkq2bt6/av2b1zg3sdzBYwXr5An6L2K9iw2MfN6Y7ea7kwlYvad7MubPnz6BD J+KUSVPpTaNEkRqVCtWpAaxcxY41qxYtWbpyKej1i7cwYr+PNUiGrNmyZtGmXbOG TRu3bd/ClSM3Dp26dO3YUZAH7569eg708dvHAGB5gQkQFkRosCHDhQcgSsRCMWN9 jVs45gfpESRJkyRdkRJLKhFIE0wy2YSTglbw9FNPD/pEVBdGUYhUU09lmBRkUmWA WWEeLgbih4CFyOFgJlZmVYoktsWiiGW9eKKKcslYmY0t4gijFzqe2KNgP464I1tB ltgiW6IlqeT/kkw26aQip0UZQGqgqNbalbDJBktst9UmCwG36IZLb74AUwxwwwlH 3HHOVACNNA9Qw9wDGDhXp3QXUKendee4k9078jhAz3cO5LNPPv6U50966BG0XkLu xQeffA/Rh9FFE1WRH34i9RcSgCWZRKBLBc4kE4I5LXiTUKxaYeFRWbxKoYYYbpgh ALXm6pStvGKI66660gosVMH2OuytxSZ77K/CNmsrs8Y666uy0hJ7bLTYUhsttNoG y+211H5bLbLglkvuuNt2a6642S6rbrPsvvvkvPTWa++9hUhpGieq9SuAKliq8oqW rthmW5i58VJmL2eeqaaaxj2THATZNNfc/zZ1YuANOBuPM8F0H19nwZ/bzRNoeOCJ Z6gEigY0UKOQGvAeQxFVSl+ml963kUae9icqqCmRupKppqZqNIStSngUUhUO1a6G UqFbbNRPY0v1u7xeba7VW2urtdS7fl11rWJjbXbYXW9ddtpJrY2u21XD7TXbXIMN Nd1T430tvnz37fffkujbyWqEW/naKQMnXsCXBu+C8G4LlzmMw8hA3KYzylFcsTUY Oxddx3qG3Oc522nHXTwmp3yoeC2f9/JAMcscKaWUWlQfppxyyp9IWqD0c4EtsYQg 0TbtpKBNQSGN9NJdBDChUWYvNTa40p/NVPV6X293r9hvr5T3wHY/vf/245efrPjR g0++9Umhj7f7UsM/tvzd0t+1/dUCrv/+/Pe97/+oKVwpDgewLCmOcQgUkwLJRKaG Ve6BbFqGcuK0uYo9hxt4Cl05Rtcn072DHt1JWaFWhqh/MAB2L2sPpA4guwPMRyJb uBmmNLWpjexud1cYSaiEZqBTHSgmVqiJqiL0Ewe5SlZOcRX0jsU0YWWgidGCoq6e SC0pDouK5rLiU7DYLC1uiItRVBYYg+XFpoyRiWIso1PU2MU0VtGNWYRjG8t1xgyp sY62uiMb9fhGOu5RjmEsV/8GSchCJklwmaCSIgkXsFVsCRYG+9LjxgQMBv6Gcmkq zuWSE6flVND/Tp7jmDj2lI7RkSxQqAvhd8bDj0T143WMelR7JuUQiFShUrfTWQ03 FZKReARoogpe8IhHk+MZ8yY8SV5QshAU5jXtedAEABKh6cxoTrOa1ZTmM7E5TW1S 85rdBOc2wznOclrTnNwcijfT+U10irML63xnNuX5zni685n2bKc+88nOo/CTnuoE 6D4FOs976tOQCE2oQiGBSH5V6aGsIaAjCUabLtHCcbuopEYnd8kFZHI4EUOONCgG p0/SKWMY3Jg3PuaxUvKpdH8KT+oIRULzACSWsTxIzGYWn4hgxKc4m8jOhuopkozk P7/j4UsOdJOaIPOYC1Lmg5pyRIMuTSr6/+wnVvt5za0S9FVetSpYxbrNsGa1q2Sl plm5mtartnWsZ0XnWgk6V6vWNa5EuatW32oUvcrTr+hcqGAHS1jSGNYTEC2cRFtz QC85NmFhYqCZOmoMCDIDc2+ChknpBEqNfY6l1OHgOv4UgQCYLAKECs/qWNa6ADQK ZipsIc0iEoCaBZUiu+RIzwLgn1AhVakv8WEAigbVVCUtAD35aoWcx9ZvMle5E3ru W6WLV+ZRt7lEue5XtStW7lYXutn97ji9y1Xy0tO87kTvWdXLTfaC073jFW87CUvf +vbvsIOb0iL9FdECCmw2XIpkbTCqG95MlqOTeyBINznSiX2yc9ARJf/HQCs6Po22 ZN2ZKcoKpTKbJsBlOGWPTnlKO9vOUJf6KUkvP/WzYAKvQFwILtFQVVwIdUF5yQNo rMA7K+wiccd8BbJ8iyJkH6+Rx0cOspGH/OMlE9nJPUZykZU7ZbJWWbxXZmuWdQxl +3r5y39r6H4T20jFQTKBXYIsJX2DYDQRZ8ERbLCcLXbBO6kUdKC1sJ9Kl+E+b1i1 rFTUh2/qqPTETiHveaHNcoaR3NlQCz3zraSFCbwY+/DSRjNmM6UqFLzGiq9IQXKo Qf1pJjtN1KVecqqhu2pQN7fV8oX1q1FNa1LX2tSjxrWsBQrmXvvaSQ1F7JhTs1gD AhjNByOwZNv/LIyPJuNyEszsmyzGWQjfeZR5dume/ZTKVP75HqwsYXpc+drYIlpS LiyxRE6cW40YdcVI/e2oCNTU4dn7qfjGiRKTZtWm4Jpp//a3kwUOXoK31eBDRjh2 FS7qfjK8365+eHUl7vCIWzzgF3fyrzfO8c/gV0rDDkWx//tIx1oUTAuEnCWZreDL smliDvZkZzUm4ZWCTNuk23MA2NFt7nx7tSwLgCsXVWgRN0S2BwhALW1r4vtoSj8B 0J0OdwcqAa3EJFcIAKV/uKCYZNoKxnuqVIkioX27CrnKo1CnbzwUszevVWq3Mdtv HPe3p52IZG973dGeY7zP3e18f1DclVb2/73D3e+FF3zgk4t4vSv+8GtPPOMnL3fJ nx3ylXd8chdvdsJr/vJ3j/zn7d530dP98aHP/Ok3j3nPrx70pVc94FtvFMuTXvCN fz2FOs773gcOgIhMrOH8S9EAI5vACls2cDjq7AZAW84TnBNKM3btm7dUZO2IQPb7 PCiUhZsgJgSxo3SqQprN1mYPOXGjbWjDFf+yxfGWyYuHZm+mDrFB+U4mEfl9Y07j eP829n/8xn8CWIBjZ4AAeID+t4B4h4ADGIAM+IBlF4EOWIEKmIAY2GkWiIH9l4EI 2IESyIEbSIAUyIAgOIIQ6IEmiIJS5Xsu+IKMEGyYIHwDRHxmVjDIhv8bkxQ5CLAA DENZb/ZsceYmMCdzF3NBn4NtNycyI+MO2nc6UChCHLZag0ZusGR0K4QFkqJo8sFo QsVLvBRpvQVMATIFSlV/p5J/DTJE+heCrlKCGch2biiAcsiCP1GHcMgqeKiC+7eH c7hpfDiAfmiHf3iHeUiHh8hpg5iHixiIjeiGj+iAkRiBkxiHibh/MJiJmigIMnga /OUaxMdYx2ZyyaZAydeDkrN8xNByIeUm0Dcn2YABnPMcKjUBSlgdOAcopnNaguId P8cy+mBCVYhChhZb6LaFPbVu65ZLHpE7VLAfn8Ji8hY08/YSQyNj9uYTTsWGa4h/ bMgFFHI0yNT/jcUFjtw4jqtSjuF4PGvIE+mYf+Yojvr2jt+4jug4j0UEj/aIj+6Y j/V4jvjojZm2j/3YjwJZY/d4kE9FkO1IjvoIkAapjhDpkP8ojxH5kBZJkQM5kfS4 kRnZkcbEkAkpkR/pj5m2iSjpe53oUPs1csXXCifHOMinchr1g8wXhM43hNImJw+G hDWnQUxoATtHWlCIWr8oAQFAHjZFdOVGfgagdCTGdMuYM1sQdUMFjWIIf74DXKTC dTMxXEKUafCIb2H3jWOpKmUplmaJlmrZlseUluU4lnB5lmI5l2tZl25Jl8WTl3cZ l32pE3yZl3YZmHvpl4JJmHKJmGY5mIZZ/5h6mZiNCZmPuZYpWZkcB3wfR4P9BYoT NTAx+Vg72EAHpooP43wuJw2umDmwOHN29llLKFrbtosZllrghiitFH6uk1NGp4XH qG7pl0sY8Yzt5n68M2kuxpWXZipB5HWROURd0Jxq+ZyTGZ3QCVXS+ZdreZ2KmSra WZ030Z3TqSDgiZ3baZ3e6ZznyZ3pKZ7r+Z3tORTvOZ6KKZ/NSZ+TaZn4+WsrGXKN ZAollzgCdlELVJPBwGwehZNtAgHRVoTUFos+mUEUlosXxm1RSJssU1NDJ34CMWJO OTtL90KXsgVe6GhY2SkfISCSBjTzN2814ZVo2JbtmJ4xGp73WJ41Kv+jNAqROEqe CMmjOQqjP8qOQXqjPzqjPsqPO2qjSFqkQ7qkR3oT+Rml9rWfAkRsoYg4AHZmpKiD GWVgXqqKmLQmlxUNRPiKPYlSSShh18dBMNWmRUmbhVIeq4WbRQdb8bFCUcmFuBVU JGqiN0QFVwd/O1SNpSJEM+aV5egTSoo8T6ppjSp2jxpVkcqoi+oglaqo71memBqk m9qonaqpk2qp6/mp1Umq4WmqPIqqhCmlrFpYmAlAnzh8nHmDFSVgkPWlDQSEpTmE qbmTRlhnNYdn02FhAZBzHuRnvugdSDmnrfNKIZYQAbBTvSmVv1kFthOiwymGIOE7 8Vd1K6oSUwD/li5aTJL5qIz5mOf6l+l6mO25rnHpruVaqTQKr4spr/SKl+1qr/qa r/zapK36rwn1qvmlmZxZZlm6paaIMATagwbafKYZUr7aoKwZrLfYQabkpqelSqpl D8y6lFd4aAiRp+iXETIEnCnmjL9EnGRYEitqhmc4rpiGhoeanKgiszbLdVxwszSL szo7s0XTszqbszDrszU7tEELtEabtDGrtDMrtDv7tD/LtC+KtE/rtEQLs1ZLtVEL tUcrtTzrtZcGsGJrSJ1IsP9ypSRXfGi2g6doYAZaWc7WikWoOb86fRRrfeaAHdZx Sh/0pt4HaCvTrEyZQh1qEL3pQiOLBTF0/1so5mg+E2kri3XVaIaEyrQ5y7VDe7lX C7Waq7XD07lg26KYy7mh+7mlW0ynO7o+C7qqa7qti6ipK7qbu7qxy7qz67q3C7uv m5y2q7Vj+7v8Q6Wx6pKw8Z+Lg7BqxoOVBIQe5bC8OrereVKghCd5grd6NjIYy33K mqxAV0LNuqFFB7K0lGg/NR8miztEpVt+2kuCahIxQWnISWk3Ab+EClzz+634Syr3 G7/4u7/1+78q4b/0O8BXIMD5S6gGzL/6C8AHTMD8m8AMvMAOzMAQPMEBHMEUjMEE XMENXMAa3L8fbL8hTKjAW8JhJrCeSINoO6sH+5lgMpO4iooNc6C7ev+aIqWaJgWs 1HuL41CsFxub2gseASBC38daHiYQrkW4Rje+6IYFtaWn53uVVqmtkKuVkmvB86d1 HcyVWqzA9dvFI9wSYIzFQjPGWzwqZuzFYkzGX8zGbpy/aRzCcUzGc7zFdazAdxzB eezAewzHb1zGfzxvJjzI9vJx+BWrNViwWFpyLoxyt6q8NgmmrPh8mZNZ0tdZ1Zcn ERqUsamLs7mxG1ZTRmzEJ2Ror1O4DCEzTTwRUOyFNJRiwrm+WRl/UzAgE0yNwRNj XozLMHbGvLwSuozBv4wTvryiwXzLxlzMPHTMBzzMzIycw4zMy6zM8/bM/+vM1JzL 2dzLu5zM3Tz/zd9czdsMzONMyOZcyIYMqwTbnwfrmQHKtgvLvDRcOc9XppWcw3a7 w+AQWhWmbR60fajTi1IoyrcpaCEGvuKbaMmYuCU7os94su1HxSfare3bvrWcohXd rRcduRldEhvd0ZH70RQ90h5N0hz9HyKN0Sad0iedoiwN0jC90iYN0i890yht0ypd 0jnd0lpQ0zv9Mz7N00FN0zgd0kXdvuec1E+CwqRhti55gy7MtjT5pTMMt2Iqt9A3 bcwBrBFGvdlmDtd7Shn7barzfRl60LBjbiG7yojrm4y7fs14lbK8voF61EgVEzxd 0Xgd0xi913YdKn790xQd2Hl914L904TN/9fue9iFzdg97diDDdl9LdnAlNhHbdmO jdl5rdkwzdkz7dk/rdSirSRMbRpm+y+KnLYAmoO2oGzxzHIOC2djaqZ1O72Z3MNr GtbZW1oalqwj1GGJInTCeNBqbbhQebhcaCk4c61fCNG5xR+8RZxHJdjcStkn0dhk WN3Yfd2KbcXdHW/a/d3hbdfjbd3kvd3gjd6+Vd6Fzd4x7d42Dd/Urd4AIt8nbd8d Pdr6DRrCq8Kp/ZIE08iuHcMNG4QVoElxds9GWG20mKY2ZwGkxIRu2reC4m2+PYXj ERDhh9aF2x686aHpRq18mkvtJtcdkbLaitMC8tdV993GyeLB5OItDv/jASLjMU7j LGHjOL7i5p3jO67jPt7jPK7eQ+7iRf7XRy7ZSd7Y+93knLGSwlal/y2K/xmgtZAw CLBmkVPVblbDEDu3JEVtaBpKEGq9pbQdxpod2muUFw64wSi4GqrEMjNih5tubc10 i6t+mVLiYAjL8DbXvgToUyfdkCbo75aVEt1bf/q4hg7ohb7oxQnpgS7pg47ojS7p jy7dlS7oReXoib7pN5TpKe7pl07on37ofirq64vqoX7qpE7prM6+ro7psy7dTn7r l1DaM8ifxNvOVi5JyPfaYDrPcctglcyTMgdhKeWaLZXb/kyUGdt93BtoSzncdWqM 7FHnqyyV+aH/5zNk4h1xspo+6pRe659O7uNe6ue+6pyu7u3+p7G+7oqe7uX+7n9e 77Bu7+gu7/dO75oe7/YO8PgO6v7e6QO/7/ouEri+8IGTX4YccrKKJcarpRYl1Vq+ cpIc2zbcqwx6ydbWmgFgixHq7CNzYaYF0BX6tyojdBkO52idANFa3LL1EC7UxE+c uCQuVIxmlXyuvh2xS7wF7jXUjA+NH0Hf8zyTEUWvEUfv3D6/9FUZy32a9D8PdVIP 7kQP9Fdf4llv9UL/9Fr/9VQP9U4/9mGP9OFe9Ua/9RDd9Wsv9mkP9U0/9XF/9mVf 916P9m7P9GzvuEpv93S/91EP94LP8Ib//whQLuURL1G0erwnN5MXv1HDrvGtuKBz tprK3prlIKwk30HZp+Y9J4XeZ5sYSqevNRAHIEsdysSzc0sM7com2/dwnx9aMPtO X/to3/O4f/e6b/t9uvt03/u5f/u+L9fAX/zD//vIn2LHn/wb0fy8z/zLzynQH/zS 7/y5Vf22r/3Dz/3Rf/jgDyXpPDiIbKX/3fgwaatSHcORHKYPQ8kRG71cXYs83M/Y x2cw1XNsPtDBCAgSXhKEXgyHhogJi16LCY0HjwaTXpMGXgeZmJqZB15YVVifWKKk olWoXqhVqqlVVFteW7OytLOxt7W4Wri2vr3Asry6xLnGtsPHwcrCy/+/xcjO0sXJ z8zG1dPX2dDa1t+73trc19bk4NTi3c3r5eHt6Fvn6vL05vbLXvr7/P3+/wADChxI sKDBgwgTKlzIsKHDfQG8BJgokeLEiBMFeBHAcWNHAQMGeAkpkuTIAQW8FFipkmUB AgS8wIxJQIECLzZv5vSCoCdPnwgWLPAidKjQBl4aKE26tIJTL04reIFAdWrVB1i9 YH3gBYPXrl8vXJjgReyFshPIplVrwYKXtm7bRvBCoS5dCnMj6PWid66Dv17+MhhU iJAgCYgODVbcKMElR5UoWYp8qdMmUZZNjSpFahQrVLFWtWLlrhYVeN5Oly6nOt63 1vhMo4YHe/b/sdqrfeF2Hfu27de/ne22N/x38dzHXSdPHRzacngPo0ufTr269evY DV6siNFiAI0cwX/saLJ8yJYpV6Z/KRNm+5g7d/ZE8JN+T6NCieZXipQ/1KdRQVUV VRBYxdVWYGGQYFdiBWAWWmql5UVacbX1lgUUBFAXBXdx2Bdfe0UA2F8OBGAYYYcl puJgjgQAmWOXTDaZZZ0EQGNnmuXY2SoBiOZjFeIEkJs0QvLWTZG9zYJkc7csOaQu ThrZ5JPKRJkkPlYGl+WQW/LWZZBU/vIlamO6UyY4Z06T3Zpstunmm3AKtN2c3kUU nkfigXeeeSKph96fM73Xnk424VTofPXx/5RfUUkt0N9S/gUYIIFWFQhBVghipaBX Cl6AwVkPjhVhhBW6RYGFG3YIYl4hAibBiA4cVlhhKzaiCCMvOkbZrlhw4qsnmeG4 o7CnuGLsZ6lscexozP5I2rLONpsstNQi+6y10mIrmrLaVssst9mGu6230Y7b7bni kjstuuWumy664LYLr7rzsuttvPR+m2+0+NqLbb/vMhvnwAQXbPDB/9TJ3cJ3Njxe SXvu6dLE6bkXaKDxHQrUxvgZ1cBQ/kUKIIADlnwgpg9s+tWnnYpV1lgTSrjWhXGd qmqqH+YsYmCvBubqrLIullgCLOJqtCSSSYZFZb9u4omOpYSyWcA+Kv9LNbRWyytu 1vu6wrW/zX599Wdia1012OWW3TXaXrOtrdpow0213GbTTa7d7OK9tdth8+0jwoAH LvjgDClMJ0bj5YnnSRBDvN7jgFpscaEZ34To5UHphxSjITc1slQVlGwpyierfBan L4Pq8swzt8UhXDfbhRerrDrAF6y2/yXr7ok8whhjuT4C2SSeyEgJjU1nwgrUUzNP SizOE9s8FtBLHz1n1XOm/fTYc++9jtl/bz314m8Pfvnih389+us/z/746o9vPvnt w//+/PHPj//90+f/vv/1A6D8RkG4AhrwgIPrjgIXlpHFOUwjfGLcn/zkp4tNjlAY xMnG7OMTRnH/DlKQ+tx/LCU6rZAuQQFAXahWJzMJwSUAsMMQh1KFsxDpJQB6yR3u UMRDQjAgAL+7lfCORpkAGC9GyftVAOqnvyUO8HpO1F/5osg/U1CRiZu54hOJpUUp Qq2L9wMjFsdICjFuEQtm9GIZyai9NE6RjVmEoxXluMYzcs+N60OgHvfIxzUdjoEU eaADyROxxk1wYjSRHHxqYqgMYs4+i4rkoyaZFBGGjoSjO5kmF6RCl4WqhWSxwARK RbPYzXAvDrChDlfpM94xoBBBFFrRhigJRhxxVzPSRK+AlUQphkKNvrQj835ZxWEB 03vEhGMyhWnMYp6Cmcdc3zKj2UxlQnNqEtPkXzaxuE07dvOY30RfONcXCAA7 ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline Content-Type: image/gif Content-Location: http://bop.diba.es/img/li_menudiba.gif Content-Transfer-Encoding: Base64 R0lGODlhBAAHAIABAP///////yH5BAEAAAEALAAAAAAEAAcAAAIIRA4WaeyrVCgA Ow== ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline Content-Type: text/css; charset=utf-8 Content-Location: http://bop.diba.es/css/estils.css Content-Transfer-Encoding: 8bit @charset "utf-8"; @import url(reset.css); @import url(formularis.css); @import url(taules.css); @import url(llistes.css); body { margin:0px; padding:0px; background-image:url(../img/background2.gif); background-repeat:repeat; background-color:#666; } #background_capcalera { margin:0px; padding:0px; width:100%; /*background-image:url(../img/background_cap2.gif);*/ background-repeat:repeat-x; } #caixa { margin-left:auto; margin-right:auto; max-width:960px; min-width:760px; background-color:#FFF; min-height:450px; background-image:url(../img/background_esq.gif); background-repeat:repeat-y; background-position:left; } #caixa2 { margin-left:auto; margin-right:auto; max-width:960px; min-width:760px; background-color:#FFF; min-height:450px; } .centre_especial{ max-width:900px!important; min-width:730px!important; overflow:hidden!important; } #ombra1 { margin-left:auto; margin-right:auto; max-width:978px; min-width:760px; min-height:450px; background-image:url(../img/ombra3.png); background-repeat:repeat-y; background-position:left; } #cap_fr_logo { width:100%; background-color:#fff; height:42px; background-image:url(../img/background_logo.gif); background-position:left; background-repeat:no-repeat; margin:0px; padding:0px; } #cap_fr_logo img{ float:left; } #desact { text-align:right; width:150px; float:right; padding:16px 8px 0 0; margin:0; } #desact a{ font-family:Verdana, Geneva, sans-serif; font-size:0.7em; font-weight:normal; color:#404040; text-decoration:none; } #desact a:hover{ color:#404040; text-decoration:underline; } .hide{ display:none; } .clear{ clear:both; } .error{ color:#f00; } /*::::::::::::::: MENU DIBA ::::::::::::::*/ #cap_fr_burdeus { width:100%; background-color:#891536; height:29px; padding:0 0 0 0; } #cap_fr_burdeus_menu { width:100%; height:29px; } #cap_fr_burdeus_menu form { padding:0px; margin-top:0px; width:165px; margin-left:auto; margin-right:auto; } #cap_fr_burdeus_menu form fieldset{ float:left; } #cap_fr_burdeus_menu form legend{ visibility:hidden; font-size:0em; } #cap_fr_burdeus_menu form input{ font-family:Verdana, Geneva, sans-serif; font-size:0.7em; } #cap_fr_burdeus_menu form input#caixa_cercar{ border:1px solid #CCC; background-color:#FFF; color:#891536; margin:0 0 0 0; vertical-align:text-top; padding-right:0px; padding-left:0px; } #cap_fr_burdeus_menu form input#cercar{ border:0px; color:#FFF; background-color:#891536; padding:0px; margin:0 3px 3px 3px; cursor:pointer; height:15px; width:45px; text-align:center; } #cap_fr_burdeus_menu form input#cercar:hover{ color:#FFF; cursor:pointer; border-bottom:1px solid #FFF; } #cap_fr_burdeus_menu a{ font-family:Verdana, Geneva, sans-serif; font-size:0.7em; color:#FFF; text-decoration:none; margin:4px 0 0 0; padding-bottom:3px; } #cap_fr_burdeus_menu a:hover{ color:#FFF; text-decoration:underline; } #cap_fr_burdeus_menu ul{ padding-top:5px; margin-left:1.3%; width:98.7%; } #cap_fr_burdeus_menu li{ float:left; } .menu_generic{ background-image:url(../img/li_menudiba.gif); background-repeat:no-repeat; background-position:left; padding-left:10px; width:16%; font-weight:bold; } .formulari{ background-image:url(../img/barra_vertical_menuDiba.gif); background-repeat:no-repeat; background-position:left; width:23%; height:20px; } .formulari img{ margin:-2px 0 0 0; padding:0; border:0px; float:left; height:25px; } .mapa{ background-image:url(../img/barra_vertical_menuDiba.gif); background-repeat:no-repeat; background-position:left; width:10%!important; text-align:center; height:20px; } .acces{ background-image:url(../img/barra_vertical_menuDiba.gif); background-repeat:no-repeat; background-position:left; width:13%!important; text-align:right; height:20px; } /*::::::::::::::: FI MENU DIBA ::::::::::::::*/ /*::::::::::::::: BANNER ::::::::::::::*/ #cap_fr_banner{ /*background-image:url(../img/banner.jpg); background-repeat:no-repeat; background-position:left; background-color:#666; width:100%; height:84px;*/ } /*::::::::::::::: FI BANNER ::::::::::::::*/ /*::::::::::::::: MENU MINISITE ::::::::::::::*/ #cap_fr_menu{ width:100%; height:26px; } #cap_fr_menu ul { padding-left:10px; } #cap_fr_menu ul li{ font-family:Verdana, Geneva, sans-serif; font-size:0.7em; color:#FFF; float:left; margin:7px 20px 0 0px; } #cap_fr_menu a{ color:#FFF; text-decoration:none; } #cap_fr_menu a:hover{ color:#FFF; text-decoration:underline; } /*::::::::::::::: FI MENU MINISITE ::::::::::::::*/ /*::::::::::::::: COLUMNA ESQUERRA ::::::::::::::*/ #esquerra { padding-left:25px; padding-top:20px; width:215px; float:left; margin:0px; font-size:0.7em; } #esquerra ul li{ list-style:none; list-style-image:url(../img/li.gif); font-family:Verdana, Arial, Helvetica, sans-serif; font-size:100%; font-weight:bold; color:#606060; line-height:1.5em; } #esquerra ul li ul{ width:190px; border-bottom:1px solid #d9d9d9; border-top:1px solid #d9d9d9; margin-bottom:5px; margin-top:4px; padding-top:4px; } #esquerra ul li ul li{ list-style:none; list-style-image:url(); font-family:Verdana, Geneva, sans-serif; font-size:100%; font-weight:normal; color:#404040; margin-bottom:5px; margin-left:5px; } #esquerra ul li a, #esquerra ol li a{ text-decoration:none; color:#606060; } #esquerra ul li ul li a{ text-decoration:none; color:#404040; } #esquerra ul li ul li ul{ border:0px; margin-bottom:4px; margin-top:4px; } #esquerra ul li ul li ul li { list-style:none; background-image:url(../img/li_menuespai.gif); background-repeat:no-repeat; background-position:inherit; font-family:Verdana, Geneva, sans-serif; font-size:100%; font-weight:normal; margin-bottom:5px; margin-left:0px; padding-left:8px; } #esquerra ol li{ list-style:decimal; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:100%; font-weight:bold; color:#606060; line-height:1.5em; margin-left:18px; } #esquerra a:hover{ text-decoration:underline; } address { font-family:Verdana, Geneva, sans-serif; font-size:100%; color:#606060; font-style:normal; line-height:1.5em; margin-top:30px; } address a{ text-decoration:none!important; } address a:visited{ color:#333!important; text-decoration:underline; } address a:hover{ color:#333!important; text-decoration:underline; } /*::::::::::::::: FI COLUMNA ESQUERRA ::::::::::::::*/ /*::::::::::::::: CENTRE ::::::::::::::*/ #centre { padding:23px 23px 23px 23px; background-color:#fff; margin: 0 0px 0 243px; font-family:Verdana, Geneva, sans-serif; color:#606060; font-size:0.7em; line-height:1.4em; } #centre_fit { padding:23px 23px 23px 23px; background-color:#fff; margin: 0 0 0 0; font-family:Verdana, Geneva, sans-serif; color:#606060; height:90%; font-size:0.7em; line-height:1.4em; } #centre h1, #centre_fit h1 { font-family:"Trebuchet MS", Arial, Helvetica, sans-serif; font-size:135%; margin:0 0 0.7em 0; } #centre h1 a, #centre_fit h1 a{ font-size:100%; } #centre h2, #centre_fit h2 { font-family:"Trebuchet MS", Arial, Helvetica, sans-serif; font-size:130%; margin:0 0 0.7em 0; line-height:130%; } #centre h2 a, #centre_fit h2 a{ font-size:100%; } #centre h3, #centre_fit h3 { font-family:"Trebuchet MS", Arial, Helvetica, sans-serif; font-size:121%; margin:0.7em 0 0.7em 0; line-height:121%; } #centre h3 a, #centre_fit h3 a{ font-size:100%; } #centre h4, #centre_fit h4{ font-family:"Trebuchet MS", Arial, Helvetica, sans-serif; font-size:110%; margin:0.7em 0 0.7em 0; line-height:110%; } #centre h4 a, #centre_fit h4 a{ font-size:100%; } #centre h5, #centre_fit h5 { font-family:"Trebuchet MS", Arial, Helvetica, sans-serif; font-size:110%; margin:0.7em 0 0.7em 0; line-height:110%; } #centre h5 a, #centre_fit h5 a{ font-size:100%; } #centre h6, #centre_fit h6 { font-family:"Trebuchet MS", Arial, Helvetica, sans-serif; font-size:110%; margin:0.7em 0 0.7em 0; line-height:110%; } #centre h6 a, #centre_fit h6 a{ font-size:100%; } #centre p, #centre_fit p{ line-height:1.4em; margin:0.7em 0 1em 0; text-align:justify; font-size:100%; } #centre p a, #centre_fit p a{ font-size:100%; } #centre a, #centre_fit a{ font-size:100%; text-decoration:none; border-bottom:1px dotted; } #centre a:visited, #centre_fit a:visited{ color:#333; text-decoration:none; border-bottom:1px dotted; } #centre a:hover, #centre_fit a:hover{ color:#333; text-decoration:none; border-bottom:1px solid; } #centre img, #centre_fit img { margin-right:0.8em; margin-left:0.8em; margin-bottom: 0.3em; margin-top:0.3em; border:0px; } img.flotantesquerra { float:left; margin-right:2em!important; margin-bottom: 0.3em; margin-top:0.3em; border:1px solid #606060; } img.flotantdreta { float:right; margin-left:0.8em; margin-bottom: 0.3em; margin-top:0.3em; border:1px solid #606060; } #centre ol, #centre_fit ol { font-family:Verdana, Geneva, sans-serif; font-size:100%; color:#606060; line-height:1.4em; list-style:decimal; list-style-position:outside; margin:0 0 25px 21px; line-height:1.5em; list-style-image:none; } #centre ol li ol, #centre_fit ol li ol{ font-size:100%; } #centre ol a, #centre_fit ol a{ font-size:100%; } .senserodoneta{ list-style-type:none!important; } #centre ul, #centre_fit ul { font-family:Verdana, Geneva, sans-serif; font-size:100%; color:#606060; line-height:1.4em; list-style:disc; list-style-position:outside; list-style-image:none; margin:0 0 25px 15px; line-height:1.5em; text-align:justify; } #centre ul li ul, #centre_fit ul li ul{ font-size:100%; margin-top:5px; } #centre ul li ul li , #centre_fit ul li ul li { list-style-image:url(../img/li_menuespai.gif); } #centre ul li ul li ul, #centre_fit ul li ul li ul{ font-size:100%; } #centre ul li dl, #centre_fit ul li dl{ font-size:100%; } /*:::: PREMSA ::::*/ .noticies{ list-style-type:none!important; } /*:::: FI PREMSA ::::*/ #centre hr, #centre_fit hr{ height:1px; border:0; background-color:#d2d2d2; overflow:hidden; } #centre p.pespecialcolor1, #centre_fit p.pespecialcolor1 { background: #f2f2f2; color: #000000; margin: 0em 23em 2em 1em; padding: 0.7em 0.7em 0.7em 0.7em; height: 100%; } #centre p.pespecialcolor2, #centre_fit p.pespecialcolor2 { background: #f2f2f2; color: #000000; margin: 0em 23em 2em 1em; padding: 0.7em 0.7em 0.7em 0.7em; height: 100%; } #centre p.pespecialcolor12, #centre_fit p.pespecialcolor12 { float: left; background: #f2f2f2; color: #000000; margin-right: 1em; padding: 0.7em 0.7em 0.7em 0.7em; width: 30%; height: 100%; } #centre br.trencarp, #centre_fit br.trencarp { /*clear:both;*/ } /*---- casos contemplats de mala programacio HTML ----*/ #centre ul ul, #centre_fit ul ul { font-size:100%; } #centre ul h2, #centre_fit ul h2 { font-size:100%; } #centre ul h3, #centre_fit ul h3 { font-size:100%; } #centre ul h4, #centre_fit ul h4 { font-size:100%; } #centre ul h5, #centre_fit ul h5 { font-size:100%; } #centre dl dd ul, #centre_fit dl dd ul { font-size:100%; margin-top:5px; } /*---- FI casos contemplats de mala programacio HTML ----*/ #centre ul a, #centre_fit ul a{ font-size:100%; } #centre ul li, #centre_fit ul li{ margin:0 0 0.5em 0; } #centre ul li p, #centre_fit ul li p{ font-size:100%; } #centre blockquote, #centre_fit blockquote { font-size:100%; } #centre blockquote a, #centre_fit blockquote a{ font-size:100%; } #centre .dreta, #centre_fit .dreta{ text-align:right; } #centre .flotantdreta, #centre_fit .flotantdreta{ float:right; } #centre .flotantesquerra, #centre_fit .flotantesquerra{ float:left; } #centre .invisible, #centre_fit .invisible{ visibility:hidden; } #centre object, #centre_fit object { margin-left:auto; margin-right:auto; border:0px; padding:0px; } /* 2 columnes*/ #centre .apartats_home_ms, #centre_fit .apartats_home_ms { float: left; width: 45%; margin:0 10px 0 10px; } #centre .apartats_home_ms h3, #centre_fit .apartats_home_ms h3 { background-color:#f2f2f2; border-bottom:1px solid #CCC; } /*::::::::::::::: FI CENTRE ::::::::::::::*/ /**/ #dreta { width:200px; padding:0 10px 0 10px; margin:0 0 15px 23px; float:right; background-color:#f2f2f2; /*position:relative;*/ } .flotesqseu{ float:left; } .h2{ list-style:none!important; line-height:1.5em!important; font-family:"Trebuchet MS", Arial, Helvetica, sans-serif!important; font-size:130%!important; font-weight:bold!important; margin:0px!important; padding:0px!important; } #dreta ul{ border-bottom:1px solid #d9d9d9; border-top:1px solid #d9d9d9; padding-top:4px; margin:4px 0 5px 0; list-style-position:outside; } #dreta ul li{ font-family:Verdana, Geneva, sans-serif; font-weight:normal; list-style:none; color:#404040; margin-bottom:5px; margin-left:5px; line-height:1.5em; text-align:left; } #dreta ul li a{ font-size: 100%; border-bottom:none!important; color:#404040!important; } #dreta ul li a:hover{ text-decoration:underline!important; } #dreta p{ font-family:Verdana, Geneva, sans-serif; font-weight:normal; font-size:100%; color:#404040; line-height:1.4em; margin:0.7em 0 0.7em 0; text-align:justify; } #dreta img{ border:0px; } /**/ /*::::::::::::::: PEU ::::::::::::::*/ #peu { border-color:#454545; border-style:solid; border-top-width: 1px; height:50px; text-align:center; margin-left:auto; margin-right:auto; max-width:970px; min-width:760px; } #peu p { margin-top:10px; font-family:Verdana, Geneva, sans-serif; font-size:0.7em; color:#FFF; } #peu a{ text-decoration:none; color:#FFF; } #peu a:hover{ text-decoration:underline; color:#FFF; } /*::::::::::::::: FI PEU ::::::::::::::*/ ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline Content-Type: image/gif Content-Location: http://bop.diba.es/img/li_menuespai.gif Content-Transfer-Encoding: Base64 R0lGODlhDAAMAIABALe3t////yH5BAEAAAEALAAAAAAMAAwAAAINjI+py+0PFXjT gRuzKgA7 ------------dXqVO0m2IHDhy6E2W6tQyG Content-Disposition: inline; filename=estils.css Content-Type: text/css; charset=utf-8; name=estils.css Content-Location: http://bop.diba.es/css/estils.css Content-Transfer-Encoding: 8bit @charset "utf-8"; @import url(reset.css); @import url(formularis.css); @import url(taules.css); @import url(llistes.css); body { margin:0px; padding:0px; background-image:url(../img/background2.gif); background-repeat:repeat; background-color:#666; } #background_capcalera { margin:0px; padding:0px; width:100%; /*background-image:url(../img/background_cap2.gif);*/ background-repeat:repeat-x; } #caixa { margin-left:auto; margin-right:auto; max-width:960px; min-width:760px; background-color:#FFF; min-height:450px; background-image:url(../img/background_esq.gif); background-repeat:repeat-y; background-position:left; } #caixa2 { margin-left:auto; margin-right:auto; max-width:960px; min-width:760px; background-color:#FFF; min-height:450px; } .centre_especial{ max-width:900px!important; min-width:730px!important; overflow:hidden!important; } #ombra1 { margin-left:auto; margin-right:auto; max-width:978px; min-width:760px; min-height:450px; background-image:url(../img/ombra3.png); background-repeat:repeat-y; background-position:left; } #cap_fr_logo { width:100%; background-color:#fff; height:42px; background-image:url(../img/background_logo.gif); background-position:left; background-repeat:no-repeat; margin:0px; padding:0px; } #cap_fr_logo img{ float:left; } #desact { text-align:right; width:150px; float:right; padding:16px 8px 0 0; margin:0; } #desact a{ font-family:Verdana, Geneva, sans-serif; font-size:0.7em; font-weight:normal; color:#404040; text-decoration:none; } #desact a:hover{ color:#404040; text-decoration:underline; } .hide{ display:none; } .clear{ clear:both; } .error{ color:#f00; } /*::::::::::::::: MENU DIBA ::::::::::::::*/ #cap_fr_burdeus { width:100%; background-color:#891536; height:29px; padding:0 0 0 0; } #cap_fr_burdeus_menu { width:100%; height:29px; } #cap_fr_burdeus_menu form { padding:0px; margin-top:0px; width:165px; margin-left:auto; margin-right:auto; } #cap_fr_burdeus_menu form fieldset{ float:left; } #cap_fr_burdeus_menu form legend{ visibility:hidden; font-size:0em; } #cap_fr_burdeus_menu form input{ font-family:Verdana, Geneva, sans-serif; font-size:0.7em; } #cap_fr_burdeus_menu form input#caixa_cercar{ border:1px solid #CCC; background-color:#FFF; color:#891536; margin:0 0 0 0; vertical-align:text-top; padding-right:0px; padding-left:0px; } #cap_fr_burdeus_menu form input#cercar{ border:0px; color:#FFF; background-color:#891536; padding:0px; margin:0 3px 3px 3px; cursor:pointer; height:15px; width:45px; text-align:center; } #cap_fr_burdeus_menu form input#cercar:hover{ color:#FFF; cursor:pointer; border-bottom:1px solid #FFF; } #cap_fr_burdeus_menu a{ font-family:Verdana, Geneva, sans-serif; font-size:0.7em; color:#FFF; text-decoration:none; margin:4px 0 0 0; padding-bottom:3px; } #cap_fr_burdeus_menu a:hover{ color:#FFF; text-decoration:underline; } #cap_fr_burdeus_menu ul{ padding-top:5px; margin-left:1.3%; width:98.7%; } #cap_fr_burdeus_menu li{ float:left; } .menu_generic{ background-image:url(../img/li_menudiba.gif); background-repeat:no-repeat; background-position:left; padding-left:10px; width:16%; font-weight:bold; } .formulari{ background-image:url(../img/barra_vertical_menuDiba.gif); background-repeat:no-repeat; background-position:left; width:23%; height:20px; } .formulari img{ margin:-2px 0 0 0; padding:0; border:0px; float:left; height:25px; } .mapa{ background-image:url(../img/barra_vertical_menuDiba.gif); background-repeat:no-repeat; background-position:left; width:10%!important; text-align:center; height:20px; } .acces{ background-image:url(../img/barra_vertical_menuDiba.gif); background-repeat:no-repeat; background-position:left; width:13%!important; text-align:right; height:20px; } /*::::::::::::::: FI MENU DIBA ::::::::::::::*/ /*::::::::::::::: BANNER ::::::::::::::*/ #cap_fr_banner{ /*background-image:url(../img/banner.jpg); background-repeat:no-repeat; background-position:left; background-color:#666; width:100%; height:84px;*/ } /*::::::::::::::: FI BANNER ::::::::::::::*/ /*::::::::::::::: MENU MINISITE ::::::::::::::*/ #cap_fr_menu{ width:100%; height:26px; } #cap_fr_menu ul { padding-left:10px; } #cap_fr_menu ul li{ font-family:Verdana, Geneva, sans-serif; font-size:0.7em; color:#FFF; float:left; margin:7px 20px 0 0px; } #cap_fr_menu a{ color:#FFF; text-decoration:none; } #cap_fr_menu a:hover{ color:#FFF; text-decoration:underline; } /*::::::::::::::: FI MENU MINISITE ::::::::::::::*/ /*::::::::::::::: COLUMNA ESQUERRA ::::::::::::::*/ #esquerra { padding-left:25px; padding-top:20px; width:215px; float:left; margin:0px; font-size:0.7em; } #esquerra ul li{ list-style:none; list-style-image:url(../img/li.gif); font-family:Verdana, Arial, Helvetica, sans-serif; font-size:100%; font-weight:bold; color:#606060; line-height:1.5em; } #esquerra ul li ul{ width:190px; border-bottom:1px solid #d9d9d9; border-top:1px solid #d9d9d9; margin-bottom:5px; margin-top:4px; padding-top:4px; } #esquerra ul li ul li{ list-style:none; list-style-image:url(); font-family:Verdana, Geneva, sans-serif; font-size:100%; font-weight:normal; color:#404040; margin-bottom:5px; margin-left:5px; } #esquerra ul li a, #esquerra ol li a{ text-decoration:none; color:#606060; } #esquerra ul li ul li a{ text-decoration:none; color:#404040; } #esquerra ul li ul li ul{ border:0px; margin-bottom:4px; margin-top:4px; } #esquerra ul li ul li ul li { list-style:none; background-image:url(../img/li_menuespai.gif); background-repeat:no-repeat; background-position:inherit; font-family:Verdana, Geneva, sans-serif; font-size:100%; font-weight:normal; margin-bottom:5px; margin-left:0px; padding-left:8px; } #esquerra ol li{ list-style:decimal; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:100%; font-weight:bold; color:#606060; line-height:1.5em; margin-left:18px; } #esquerra a:hover{ text-decoration:underline; } address { font-family:Verdana, Geneva, sans-serif; font-size:100%; color:#606060; font-style:normal; line-height:1.5em; margin-top:30px; } address a{ text-decoration:none!important; } address a:visited{ color:#333!important; text-decoration:underline; } address a:hover{ color:#333!important; text-decoration:underline; } /*::::::::::::::: FI COLUMNA ESQUERRA ::::::::::::::*/ /*::::::::::::::: CENTRE ::::::::::::::*/ #centre { padding:23px 23px 23px 23px; background-color:#fff; margin: 0 0px 0 243px; font-family:Verdana, Geneva, sans-serif; color:#606060; font-size:0.7em; line-height:1.4em; } #centre_fit { padding:23px 23px 23px 23px; background-color:#fff; margin: 0 0 0 0; font-family:Verdana, Geneva, sans-serif; color:#606060; height:90%; font-size:0.7em; line-height:1.4em; } #centre h1, #centre_fit h1 { font-family:"Trebuchet MS", Arial, Helvetica, sans-serif; font-size:135%; margin:0 0 0.7em 0; } #centre h1 a, #centre_fit h1 a{ font-size:100%; } #centre h2, #centre_fit h2 { font-family:"Trebuchet MS", Arial, Helvetica, sans-serif; font-size:130%; margin:0 0 0.7em 0; line-height:130%; } #centre h2 a, #centre_fit h2 a{ font-size:100%; } #centre h3, #centre_fit h3 { font-family:"Trebuchet MS", Arial, Helvetica, sans-serif; font-size:121%; margin:0.7em 0 0.7em 0; line-height:121%; } #centre h3 a, #centre_fit h3 a{ font-size:100%; } #centre h4, #centre_fit h4{ font-family:"Trebuchet MS", Arial, Helvetica, sans-serif; font-size:110%; margin:0.7em 0 0.7em 0; line-height:110%; } #centre h4 a, #centre_fit h4 a{ font-size:100%; } #centre h5, #centre_fit h5 { font-family:"Trebuchet MS", Arial, Helvetica, sans-serif; font-size:110%; margin:0.7em 0 0.7em 0; line-height:110%; } #centre h5 a, #centre_fit h5 a{ font-size:100%; } #centre h6, #centre_fit h6 { font-family:"Trebuchet MS", Arial, Helvetica, sans-serif; font-size:110%; margin:0.7em 0 0.7em 0; line-height:110%; } #centre h6 a, #centre_fit h6 a{ font-size:100%; } #centre p, #centre_fit p{ line-height:1.4em; margin:0.7em 0 1em 0; text-align:justify; font-size:100%; } #centre p a, #centre_fit p a{ font-size:100%; } #centre a, #centre_fit a{ font-size:100%; text-decoration:none; border-bottom:1px dotted; } #centre a:visited, #centre_fit a:visited{ color:#333; text-decoration:none; border-bottom:1px dotted; } #centre a:hover, #centre_fit a:hover{ color:#333; text-decoration:none; border-bottom:1px solid; } #centre img, #centre_fit img { margin-right:0.8em; margin-left:0.8em; margin-bottom: 0.3em; margin-top:0.3em; border:0px; } img.flotantesquerra { float:left; margin-right:2em!important; margin-bottom: 0.3em; margin-top:0.3em; border:1px solid #606060; } img.flotantdreta { float:right; margin-left:0.8em; margin-bottom: 0.3em; margin-top:0.3em; border:1px solid #606060; } #centre ol, #centre_fit ol { font-family:Verdana, Geneva, sans-serif; font-size:100%; color:#606060; line-height:1.4em; list-style:decimal; list-style-position:outside; margin:0 0 25px 21px; line-height:1.5em; list-style-image:none; } #centre ol li ol, #centre_fit ol li ol{ font-size:100%; } #centre ol a, #centre_fit ol a{ font-size:100%; } .senserodoneta{ list-style-type:none!important; } #centre ul, #centre_fit ul { font-family:Verdana, Geneva, sans-serif; font-size:100%; color:#606060; line-height:1.4em; list-style:disc; list-style-position:outside; list-style-image:none; margin:0 0 25px 15px; line-height:1.5em; text-align:justify; } #centre ul li ul, #centre_fit ul li ul{ font-size:100%; margin-top:5px; } #centre ul li ul li , #centre_fit ul li ul li { list-style-image:url(../img/li_menuespai.gif); } #centre ul li ul li ul, #centre_fit ul li ul li ul{ font-size:100%; } #centre ul li dl, #centre_fit ul li dl{ font-size:100%; } /*:::: PREMSA ::::*/ .noticies{ list-style-type:none!important; } /*:::: FI PREMSA ::::*/ #centre hr, #centre_fit hr{ height:1px; border:0; background-color:#d2d2d2; overflow:hidden; } #centre p.pespecialcolor1, #centre_fit p.pespecialcolor1 { background: #f2f2f2; color: #000000; margin: 0em 23em 2em 1em; padding: 0.7em 0.7em 0.7em 0.7em; height: 100%; } #centre p.pespecialcolor2, #centre_fit p.pespecialcolor2 { background: #f2f2f2; color: #000000; margin: 0em 23em 2em 1em; padding: 0.7em 0.7em 0.7em 0.7em; height: 100%; } #centre p.pespecialcolor12, #centre_fit p.pespecialcolor12 { float: left; background: #f2f2f2; color: #000000; margin-right: 1em; padding: 0.7em 0.7em 0.7em 0.7em; width: 30%; height: 100%; } #centre br.trencarp, #centre_fit br.trencarp { /*clear:both;*/ } /*---- casos contemplats de mala programacio HTML ----*/ #centre ul ul, #centre_fit ul ul { font-size:100%; } #centre ul h2, #centre_fit ul h2 { font-size:100%; } #centre ul h3, #centre_fit ul h3 { font-size:100%; } #centre ul h4, #centre_fit ul h4 { font-size:100%; } #centre ul h5, #centre_fit ul h5 { font-size:100%; } #centre dl dd ul, #centre_fit dl dd ul { font-size:100%; margin-top:5px; } /*---- FI casos contemplats de mala programacio HTML ----*/ #centre ul a, #centre_fit ul a{ font-size:100%; } #centre ul li, #centre_fit ul li{ margin:0 0 0.5em 0; } #centre ul li p, #centre_fit ul li p{ font-size:100%; } #centre blockquote, #centre_fit blockquote { font-size:100%; } #centre blockquote a, #centre_fit blockquote a{ font-size:100%; } #centre .dreta, #centre_fit .dreta{ text-align:right; } #centre .flotantdreta, #centre_fit .flotantdreta{ float:right; } #centre .flotantesquerra, #centre_fit .flotantesquerra{ float:left; } #centre .invisible, #centre_fit .invisible{ visibility:hidden; } #centre object, #centre_fit object { margin-left:auto; margin-right:auto; border:0px; padding:0px; } /* 2 columnes*/ #centre .apartats_home_ms, #centre_fit .apartats_home_ms { float: left; width: 45%; margin:0 10px 0 10px; } #centre .apartats_home_ms h3, #centre_fit .apartats_home_ms h3 { background-color:#f2f2f2; border-bottom:1px solid #CCC; } /*::::::::::::::: FI CENTRE ::::::::::::::*/ /**/ #dreta { width:200px; padding:0 10px 0 10px; margin:0 0 15px 23px; float:right; background-color:#f2f2f2; /*position:relative;*/ } .flotesqseu{ float:left; } .h2{ list-style:none!important; line-height:1.5em!important; font-family:"Trebuchet MS", Arial, Helvetica, sans-serif!important; font-size:130%!important; font-weight:bold!important; margin:0px!important; padding:0px!important; } #dreta ul{ border-bottom:1px solid #d9d9d9; border-top:1px solid #d9d9d9; padding-top:4px; margin:4px 0 5px 0; list-style-position:outside; } #dreta ul li{ font-family:Verdana, Geneva, sans-serif; font-weight:normal; list-style:none; color:#404040; margin-bottom:5px; margin-left:5px; line-height:1.5em; text-align:left; } #dreta ul li a{ font-size: 100%; border-bottom:none!important; color:#404040!important; } #dreta ul li a:hover{ text-decoration:underline!important; } #dreta p{ font-family:Verdana, Geneva, sans-serif; font-weight:normal; font-size:100%; color:#404040; line-height:1.4em; margin:0.7em 0 0.7em 0; text-align:justify; } #dreta img{ border:0px; } /**/ /*::::::::::::::: PEU ::::::::::::::*/ #peu { border-color:#454545; border-style:solid; border-top-width: 1px; height:50px; text-align:center; margin-left:auto; margin-right:auto; max-width:970px; min-width:760px; } #peu p { margin-top:10px; font-family:Verdana, Geneva, sans-serif; font-size:0.7em; color:#FFF; } #peu a{ text-decoration:none; color:#FFF; } #peu a:hover{ text-decoration:underline; color:#FFF; } /*::::::::::::::: FI PEU ::::::::::::::*/ ------------dXqVO0m2IHDhy6E2W6tQyG--