commit/galaxy-central: 8 new changesets
OCBuZXcgY29tbWl0cyBpbiBnYWxheHktY2VudHJhbDoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9n YWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy85Zjc5NjZlNDgxNDYvCkNoYW5nZXNldDogICA5 Zjc5NjZlNDgxNDYKVXNlcjogICAgICAgIGRhbm5vbgpEYXRlOiAgICAgICAgMjAxNS0wMi0yMyAx NzoxNjoxMCswMDowMApTdW1tYXJ5OiAgICAgRUFGUCwgY2xlYW5lciBzaHV0ZG93biB3aGVuIHRo ZXJlJ3MgYSBjb250cm9sIHdvcmtlciBpbml0aWFsaXo9CmF0aW9uIGVycm9yLgpBZmZlY3RlZCAj OiAgMSBmaWxlCgpkaWZmIC1yIGNjM2M0ZjUxZDFlYTU3MTYwOGIwMTdjMWQxZmM4MTAwZjZhZDll MzUgLXIgOWY3OTY2ZTQ4MTQ2NmNmN2EyMjRjMWI9CmI4NzA3OGY2MjgxNjU3YmFkIGxpYi9nYWxh eHkvYXBwLnB5Ci0tLSBhL2xpYi9nYWxheHkvYXBwLnB5CisrKyBiL2xpYi9nYWxheHkvYXBwLnB5 CkBAIC0xNjIsOCArMTYyLDExIEBACiAgICAgICAgIGlmIHNlbGYuaGVhcnRiZWF0OgogICAgICAg ICAgICAgc2VsZi5oZWFydGJlYXQuc2h1dGRvd24oKQogICAgICAgICBzZWxmLnVwZGF0ZV9yZXBv c2l0b3J5X21hbmFnZXIuc2h1dGRvd24oKQotICAgICAgICBpZiBzZWxmLmNvbnRyb2xfd29ya2Vy OgorICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmNvbnRyb2xfd29ya2VyLnNodXRkb3du KCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgIyBUaGVyZSBp cyBubyBjb250cm9sX3dvcmtlcgorICAgICAgICAgICAgcGFzcwogICAgICAgICB0cnk6CiAgICAg ICAgICAgICAjIElmIHRoZSBkYXRhdHlwZXMgcmVnaXN0cnkgd2FzIHBlcnNpc3RlZCwgYXR0ZW1w dCB0bwogICAgICAgICAgICAgIyByZW1vdmUgdGhlIHRlbXBvcmFyeSBmaWxlIGluIHdoaWNoIGl0 IHdhcyB3cml0dGVuLgoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRy YWwvY29tbWl0cy81YjE3NzY4NDYzMzIvCkNoYW5nZXNldDogICA1YjE3NzY4NDYzMzIKVXNlcjog ICAgICAgIGd1ZXJsZXIKRGF0ZTogICAgICAgIDIwMTUtMDItMjMgMTc6NTA6MjcrMDA6MDAKU3Vt bWFyeTogICAgIFNlbGVjdDIgZml4CkFmZmVjdGVkICM6ICAyMSBmaWxlcwoKZGlmZiAtciA5Zjc5 NjZlNDgxNDY2Y2Y3YTIyNGMxYmI4NzA3OGY2MjgxNjU3YmFkIC1yIDViMTc3Njg0NjMzMmNiZmM4 MDhmMDQxPQpkMGZmYzZlN2ZmZGRkNjQzNCBjbGllbnQvZ2FsYXh5L3NjcmlwdHMvbGlicy9qcXVl cnkvc2VsZWN0Mi5qcwotLS0gYS9jbGllbnQvZ2FsYXh5L3NjcmlwdHMvbGlicy9qcXVlcnkvc2Vs ZWN0Mi5qcworKysgYi9jbGllbnQvZ2FsYXh5L3NjcmlwdHMvbGlicy9qcXVlcnkvc2VsZWN0Mi5q cwpAQCAtMSw3ICsxLDcgQEAKIC8qCiBDb3B5cmlnaHQgMjAxMiBJZ29yIFZheW5iZXJnCj0yMAot VmVyc2lvbjogMy40LjMgVGltZXN0YW1wOiBUdWUgU2VwIDE3IDA2OjQ3OjE0IFBEVCAyMDEzCitW ZXJzaW9uOiAzLjUuMSBUaW1lc3RhbXA6IFR1ZSBKdWwgMjIgMTg6NTg6NTYgRURUIDIwMTQKPTIw CiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVy c2lvbiAyLjAgKHRoZSAiQXBhYz0KaGUgTGljZW5zZSIpIG9yIHRoZSBHTlUKIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCBMaWNlbnNlIikuIFlvdSBtYXkgY2hvb3Nl IGVpdGhlPQpyIGxpY2Vuc2UgdG8gZ292ZXJuIHlvdXIKQEAgLTE0LDcgKzE0LDcgQEAKICAgICBo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC5odG1sCj0yMAogVW5sZXNzIHJlcXVp cmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBk aXN0cmk9CmJ1dGVkIHVuZGVyIHRoZQotQXBhY2hlIExpY2Vuc2Ugb3IgdGhlIEdQTCBMaWNlc25z ZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVQ9CkhPVVQgV0FSUkFOVElF UyBPUgorQXBhY2hlIExpY2Vuc2Ugb3IgdGhlIEdQTCBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u IGFuICJBUyBJUyIgQkFTSVMsIFdJVEg9Ck9VVCBXQVJSQU5USUVTIE9SCiBDT05ESVRJT05TIE9G IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIEFwYWNoZSBMaWNl bnNlID0KYW5kIHRoZSBHUEwgTGljZW5zZSBmb3IKIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl cm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBBcGFjPQpoZSBMaWNl bnNlIGFuZCB0aGUgR1BMIExpY2Vuc2UuCiAqLwpAQCAtOTgsMjQgKzk4LDI4IEBACiAgICAgfSwK ICAgICBNRUFTVVJFX1NDUk9MTEJBUl9URU1QTEFURSA9M0QgIjxkaXYgY2xhc3M9M0Qnc2VsZWN0 Mi1tZWFzdXJlLXNjcm9sbGJhPQpyJz48L2Rpdj4iLAo9MjAKLSAgICBESUFDUklUSUNTID0zRCB7 Ilx1MjRCNiI6IkEiLCJcdUZGMjEiOiJBIiwiXHUwMEMwIjoiQSIsIlx1MDBDMSI6IkEiLCJcPQp1 MDBDMiI6IkEiLCJcdTFFQTYiOiJBIiwiXHUxRUE0IjoiQSIsIlx1MUVBQSI6IkEiLCJcdTFFQTgi OiJBIiwiXHUwMEMzIjoiQSI9CiwiXHUwMTAwIjoiQSIsIlx1MDEwMiI6IkEiLCJcdTFFQjAiOiJB IiwiXHUxRUFFIjoiQSIsIlx1MUVCNCI6IkEiLCJcdTFFQjIiOj0KIkEiLCJcdTAyMjYiOiJBIiwi XHUwMUUwIjoiQSIsIlx1MDBDNCI6IkEiLCJcdTAxREUiOiJBIiwiXHUxRUEyIjoiQSIsIlx1MDBD PQo1IjoiQSIsIlx1MDFGQSI6IkEiLCJcdTAxQ0QiOiJBIiwiXHUwMjAwIjoiQSIsIlx1MDIwMiI6 IkEiLCJcdTFFQTAiOiJBIiwiXHU9CjFFQUMiOiJBIiwiXHUxRUI2IjoiQSIsIlx1MUUwMCI6IkEi LCJcdTAxMDQiOiJBIiwiXHUwMjNBIjoiQSIsIlx1MkM2RiI6IkEiLD0KIlx1QTczMiI6IkFBIiwi XHUwMEM2IjoiQUUiLCJcdTAxRkMiOiJBRSIsIlx1MDFFMiI6IkFFIiwiXHVBNzM0IjoiQU8iLCJc dUE3PQozNiI6IkFVIiwiXHVBNzM4IjoiQVYiLCJcdUE3M0EiOiJBViIsIlx1QTczQyI6IkFZIiwi XHUyNEI3IjoiQiIsIlx1RkYyMiI6IkI9CiIsIlx1MUUwMiI6IkIiLCJcdTFFMDQiOiJCIiwiXHUx RTA2IjoiQiIsIlx1MDI0MyI6IkIiLCJcdTAxODIiOiJCIiwiXHUwMTgxIj0KOiJCIiwiXHUyNEI4 IjoiQyIsIlx1RkYyMyI6IkMiLCJcdTAxMDYiOiJDIiwiXHUwMTA4IjoiQyIsIlx1MDEwQSI6IkMi LCJcdTAxPQowQyI6IkMiLCJcdTAwQzciOiJDIiwiXHUxRTA4IjoiQyIsIlx1MDE4NyI6IkMiLCJc dTAyM0IiOiJDIiwiXHVBNzNFIjoiQyIsIlw9CnUyNEI5IjoiRCIsIlx1RkYyNCI6IkQiLCJcdTFF MEEiOiJEIiwiXHUwMTBFIjoiRCIsIlx1MUUwQyI6IkQiLCJcdTFFMTAiOiJEIj0KLCJcdTFFMTIi OiJEIiwiXHUxRTBFIjoiRCIsIlx1MDExMCI6IkQiLCJcdTAxOEIiOiJEIiwiXHUwMThBIjoiRCIs Ilx1MDE4OSI6PQoiRCIsIlx1QTc3OSI6IkQiLCJcdTAxRjEiOiJEWiIsIlx1MDFDNCI6IkRaIiwi XHUwMUYyIjoiRHoiLCJcdTAxQzUiOiJEeiIsIlw9CnUyNEJBIjoiRSIsIlx1RkYyNSI6IkUiLCJc dTAwQzgiOiJFIiwiXHUwMEM5IjoiRSIsIlx1MDBDQSI6IkUiLCJcdTFFQzAiOiJFIj0KLCJcdTFF QkUiOiJFIiwiXHUxRUM0IjoiRSIsIlx1MUVDMiI6IkUiLCJcdTFFQkMiOiJFIiwiXHUwMTEyIjoi RSIsIlx1MUUxNCI6PQoiRSIsIlx1MUUxNiI6IkUiLCJcdTAxMTQiOiJFIiwiXHUwMTE2IjoiRSIs Ilx1MDBDQiI6IkUiLCJcdTFFQkEiOiJFIiwiXHUwMTE9CkEiOiJFIiwiXHUwMjA0IjoiRSIsIlx1 MDIwNiI6IkUiLCJcdTFFQjgiOiJFIiwiXHUxRUM2IjoiRSIsIlx1MDIyOCI6IkUiLCJcdT0KMUUx QyI6IkUiLCJcdTAxMTgiOiJFIiwiXHUxRTE4IjoiRSIsIlx1MUUxQSI6IkUiLCJcdTAxOTAiOiJF IiwiXHUwMThFIjoiRSIsPQoiXHUyNEJCIjoiRiIsIlx1RkYyNiI6IkYiLCJcdTFFMUUiOiJGIiwi XHUwMTkxIjoiRiIsIlx1QTc3QiI6IkYiLCJcdTI0QkMiOiI9CkciLCJcdUZGMjciOiJHIiwiXHUw MUY0IjoiRyIsIlx1MDExQyI6IkciLCJcdTFFMjAiOiJHIiwiXHUwMTFFIjoiRyIsIlx1MDEyMD0K IjoiRyIsIlx1MDFFNiI6IkciLCJcdTAxMjIiOiJHIiwiXHUwMUU0IjoiRyIsIlx1MDE5MyI6Ikci LCJcdUE3QTAiOiJHIiwiXHVBPQo3N0QiOiJHIiwiXHVBNzdFIjoiRyIsIlx1MjRCRCI6IkgiLCJc dUZGMjgiOiJIIiwiXHUwMTI0IjoiSCIsIlx1MUUyMiI6IkgiLCI9Clx1MUUyNiI6IkgiLCJcdTAy MUUiOiJIIiwiXHUxRTI0IjoiSCIsIlx1MUUyOCI6IkgiLCJcdTFFMkEiOiJIIiwiXHUwMTI2Ijoi SD0KIiwiXHUyQzY3IjoiSCIsIlx1MkM3NSI6IkgiLCJcdUE3OEQiOiJIIiwiXHUyNEJFIjoiSSIs Ilx1RkYyOSI6IkkiLCJcdTAwQ0MiPQo6IkkiLCJcdTAwQ0QiOiJJIiwiXHUwMENFIjoiSSIsIlx1 MDEyOCI6IkkiLCJcdTAxMkEiOiJJIiwiXHUwMTJDIjoiSSIsIlx1MDE9CjMwIjoiSSIsIlx1MDBD RiI6IkkiLCJcdTFFMkUiOiJJIiwiXHUxRUM4IjoiSSIsIlx1MDFDRiI6IkkiLCJcdTAyMDgiOiJJ IiwiXD0KdTAyMEEiOiJJIiwiXHUxRUNBIjoiSSIsIlx1MDEyRSI6IkkiLCJcdTFFMkMiOiJJIiwi XHUwMTk3IjoiSSIsIlx1MjRCRiI6IkoiPQosIlx1RkYyQSI6IkoiLCJcdTAxMzQiOiJKIiwiXHUw MjQ4IjoiSiIsIlx1MjRDMCI6IksiLCJcdUZGMkIiOiJLIiwiXHUxRTMwIjo9CiJLIiwiXHUwMUU4 IjoiSyIsIlx1MUUzMiI6IksiLCJcdTAxMzYiOiJLIiwiXHUxRTM0IjoiSyIsIlx1MDE5OCI6Iksi LCJcdTJDNj0KOSI6IksiLCJcdUE3NDAiOiJLIiwiXHVBNzQyIjoiSyIsIlx1QTc0NCI6IksiLCJc dUE3QTIiOiJLIiwiXHUyNEMxIjoiTCIsIlx1PQpGRjJDIjoiTCIsIlx1MDEzRiI6IkwiLCJcdTAx MzkiOiJMIiwiXHUwMTNEIjoiTCIsIlx1MUUzNiI6IkwiLCJcdTFFMzgiOiJMIiw9CiJcdTAxM0Ii OiJMIiwiXHUxRTNDIjoiTCIsIlx1MUUzQSI6IkwiLCJcdTAxNDEiOiJMIiwiXHUwMjNEIjoiTCIs Ilx1MkM2MiI6Ij0KTCIsIlx1MkM2MCI6IkwiLCJcdUE3NDgiOiJMIiwiXHVBNzQ2IjoiTCIsIlx1 QTc4MCI6IkwiLCJcdTAxQzciOiJMSiIsIlx1MDFDPQo4IjoiTGoiLCJcdTI0QzIiOiJNIiwiXHVG RjJEIjoiTSIsIlx1MUUzRSI6Ik0iLCJcdTFFNDAiOiJNIiwiXHUxRTQyIjoiTSIsIlw9CnUyQzZF IjoiTSIsIlx1MDE5QyI6Ik0iLCJcdTI0QzMiOiJOIiwiXHVGRjJFIjoiTiIsIlx1MDFGOCI6Ik4i LCJcdTAxNDMiOiJOIj0KLCJcdTAwRDEiOiJOIiwiXHUxRTQ0IjoiTiIsIlx1MDE0NyI6Ik4iLCJc dTFFNDYiOiJOIiwiXHUwMTQ1IjoiTiIsIlx1MUU0QSI6PQoiTiIsIlx1MUU0OCI6Ik4iLCJcdTAy MjAiOiJOIiwiXHUwMTlEIjoiTiIsIlx1QTc5MCI6Ik4iLCJcdUE3QTQiOiJOIiwiXHUwMUM9CkEi OiJOSiIsIlx1MDFDQiI6Ik5qIiwiXHUyNEM0IjoiTyIsIlx1RkYyRiI6Ik8iLCJcdTAwRDIiOiJP IiwiXHUwMEQzIjoiTyIsIj0KXHUwMEQ0IjoiTyIsIlx1MUVEMiI6Ik8iLCJcdTFFRDAiOiJPIiwi XHUxRUQ2IjoiTyIsIlx1MUVENCI6Ik8iLCJcdTAwRDUiOiJPPQoiLCJcdTFFNEMiOiJPIiwiXHUw MjJDIjoiTyIsIlx1MUU0RSI6Ik8iLCJcdTAxNEMiOiJPIiwiXHUxRTUwIjoiTyIsIlx1MUU1MiI9 CjoiTyIsIlx1MDE0RSI6Ik8iLCJcdTAyMkUiOiJPIiwiXHUwMjMwIjoiTyIsIlx1MDBENiI6Ik8i LCJcdTAyMkEiOiJPIiwiXHUxRT0KQ0UiOiJPIiwiXHUwMTUwIjoiTyIsIlx1MDFEMSI6Ik8iLCJc dTAyMEMiOiJPIiwiXHUwMjBFIjoiTyIsIlx1MDFBMCI6Ik8iLCJcPQp1MUVEQyI6Ik8iLCJcdTFF REEiOiJPIiwiXHUxRUUwIjoiTyIsIlx1MUVERSI6Ik8iLCJcdTFFRTIiOiJPIiwiXHUxRUNDIjoi TyI9CiwiXHUxRUQ4IjoiTyIsIlx1MDFFQSI6Ik8iLCJcdTAxRUMiOiJPIiwiXHUwMEQ4IjoiTyIs Ilx1MDFGRSI6Ik8iLCJcdTAxODYiOj0KIk8iLCJcdTAxOUYiOiJPIiwiXHVBNzRBIjoiTyIsIlx1 QTc0QyI6Ik8iLCJcdTAxQTIiOiJPSSIsIlx1QTc0RSI6Ik9PIiwiXHUwPQoyMjIiOiJPVSIsIlx1 MjRDNSI6IlAiLCJcdUZGMzAiOiJQIiwiXHUxRTU0IjoiUCIsIlx1MUU1NiI6IlAiLCJcdTAxQTQi OiJQIiw9CiJcdTJDNjMiOiJQIiwiXHVBNzUwIjoiUCIsIlx1QTc1MiI6IlAiLCJcdUE3NTQiOiJQ IiwiXHUyNEM2IjoiUSIsIlx1RkYzMSI6Ij0KUSIsIlx1QTc1NiI6IlEiLCJcdUE3NTgiOiJRIiwi XHUwMjRBIjoiUSIsIlx1MjRDNyI6IlIiLCJcdUZGMzIiOiJSIiwiXHUwMTU0PQoiOiJSIiwiXHUx RTU4IjoiUiIsIlx1MDE1OCI6IlIiLCJcdTAyMTAiOiJSIiwiXHUwMjEyIjoiUiIsIlx1MUU1QSI6 IlIiLCJcdTE9CkU1QyI6IlIiLCJcdTAxNTYiOiJSIiwiXHUxRTVFIjoiUiIsIlx1MDI0QyI6IlIi LCJcdTJDNjQiOiJSIiwiXHVBNzVBIjoiUiIsIj0KXHVBN0E2IjoiUiIsIlx1QTc4MiI6IlIiLCJc dTI0QzgiOiJTIiwiXHVGRjMzIjoiUyIsIlx1MUU5RSI6IlMiLCJcdTAxNUEiOiJTPQoiLCJcdTFF NjQiOiJTIiwiXHUwMTVDIjoiUyIsIlx1MUU2MCI6IlMiLCJcdTAxNjAiOiJTIiwiXHUxRTY2Ijoi UyIsIlx1MUU2MiI9CjoiUyIsIlx1MUU2OCI6IlMiLCJcdTAyMTgiOiJTIiwiXHUwMTVFIjoiUyIs Ilx1MkM3RSI6IlMiLCJcdUE3QTgiOiJTIiwiXHVBNz0KODQiOiJTIiwiXHUyNEM5IjoiVCIsIlx1 RkYzNCI6IlQiLCJcdTFFNkEiOiJUIiwiXHUwMTY0IjoiVCIsIlx1MUU2QyI6IlQiLCJcPQp1MDIx QSI6IlQiLCJcdTAxNjIiOiJUIiwiXHUxRTcwIjoiVCIsIlx1MUU2RSI6IlQiLCJcdTAxNjYiOiJU IiwiXHUwMUFDIjoiVCI9CiwiXHUwMUFFIjoiVCIsIlx1MDIzRSI6IlQiLCJcdUE3ODYiOiJUIiwi XHVBNzI4IjoiVFoiLCJcdTI0Q0EiOiJVIiwiXHVGRjM1Ij0KOiJVIiwiXHUwMEQ5IjoiVSIsIlx1 MDBEQSI6IlUiLCJcdTAwREIiOiJVIiwiXHUwMTY4IjoiVSIsIlx1MUU3OCI6IlUiLCJcdTAxPQo2 QSI6IlUiLCJcdTFFN0EiOiJVIiwiXHUwMTZDIjoiVSIsIlx1MDBEQyI6IlUiLCJcdTAxREIiOiJV IiwiXHUwMUQ3IjoiVSIsIlw9CnUwMUQ1IjoiVSIsIlx1MDFEOSI6IlUiLCJcdTFFRTYiOiJVIiwi XHUwMTZFIjoiVSIsIlx1MDE3MCI6IlUiLCJcdTAxRDMiOiJVIj0KLCJcdTAyMTQiOiJVIiwiXHUw MjE2IjoiVSIsIlx1MDFBRiI6IlUiLCJcdTFFRUEiOiJVIiwiXHUxRUU4IjoiVSIsIlx1MUVFRSI6 PQoiVSIsIlx1MUVFQyI6IlUiLCJcdTFFRjAiOiJVIiwiXHUxRUU0IjoiVSIsIlx1MUU3MiI6IlUi LCJcdTAxNzIiOiJVIiwiXHUxRTc9CjYiOiJVIiwiXHUxRTc0IjoiVSIsIlx1MDI0NCI6IlUiLCJc dTI0Q0IiOiJWIiwiXHVGRjM2IjoiViIsIlx1MUU3QyI6IlYiLCJcdT0KMUU3RSI6IlYiLCJcdTAx QjIiOiJWIiwiXHVBNzVFIjoiViIsIlx1MDI0NSI6IlYiLCJcdUE3NjAiOiJWWSIsIlx1MjRDQyI6 IlciPQosIlx1RkYzNyI6IlciLCJcdTFFODAiOiJXIiwiXHUxRTgyIjoiVyIsIlx1MDE3NCI6Ilci LCJcdTFFODYiOiJXIiwiXHUxRTg0Ijo9CiJXIiwiXHUxRTg4IjoiVyIsIlx1MkM3MiI6IlciLCJc dTI0Q0QiOiJYIiwiXHVGRjM4IjoiWCIsIlx1MUU4QSI6IlgiLCJcdTFFOD0KQyI6IlgiLCJcdTI0 Q0UiOiJZIiwiXHVGRjM5IjoiWSIsIlx1MUVGMiI6IlkiLCJcdTAwREQiOiJZIiwiXHUwMTc2Ijoi WSIsIlx1PQoxRUY4IjoiWSIsIlx1MDIzMiI6IlkiLCJcdTFFOEUiOiJZIiwiXHUwMTc4IjoiWSIs Ilx1MUVGNiI6IlkiLCJcdTFFRjQiOiJZIiw9CiJcdTAxQjMiOiJZIiwiXHUwMjRFIjoiWSIsIlx1 MUVGRSI6IlkiLCJcdTI0Q0YiOiJaIiwiXHVGRjNBIjoiWiIsIlx1MDE3OSI6Ij0KWiIsIlx1MUU5 MCI6IloiLCJcdTAxN0IiOiJaIiwiXHUwMTdEIjoiWiIsIlx1MUU5MiI6IloiLCJcdTFFOTQiOiJa IiwiXHUwMUI1PQoiOiJaIiwiXHUwMjI0IjoiWiIsIlx1MkM3RiI6IloiLCJcdTJDNkIiOiJaIiwi XHVBNzYyIjoiWiIsIlx1MjREMCI6ImEiLCJcdUY9CkY0MSI6ImEiLCJcdTFFOUEiOiJhIiwiXHUw MEUwIjoiYSIsIlx1MDBFMSI6ImEiLCJcdTAwRTIiOiJhIiwiXHUxRUE3IjoiYSIsIj0KXHUxRUE1 IjoiYSIsIlx1MUVBQiI6ImEiLCJcdTFFQTkiOiJhIiwiXHUwMEUzIjoiYSIsIlx1MDEwMSI6ImEi LCJcdTAxMDMiOiJhPQoiLCJcdTFFQjEiOiJhIiwiXHUxRUFGIjoiYSIsIlx1MUVCNSI6ImEiLCJc dTFFQjMiOiJhIiwiXHUwMjI3IjoiYSIsIlx1MDFFMSI9CjoiYSIsIlx1MDBFNCI6ImEiLCJcdTAx REYiOiJhIiwiXHUxRUEzIjoiYSIsIlx1MDBFNSI6ImEiLCJcdTAxRkIiOiJhIiwiXHUwMT0KQ0Ui OiJhIiwiXHUwMjAxIjoiYSIsIlx1MDIwMyI6ImEiLCJcdTFFQTEiOiJhIiwiXHUxRUFEIjoiYSIs Ilx1MUVCNyI6ImEiLCJcPQp1MUUwMSI6ImEiLCJcdTAxMDUiOiJhIiwiXHUyQzY1IjoiYSIsIlx1 MDI1MCI6ImEiLCJcdUE3MzMiOiJhYSIsIlx1MDBFNiI6ImE9CmUiLCJcdTAxRkQiOiJhZSIsIlx1 MDFFMyI6ImFlIiwiXHVBNzM1IjoiYW8iLCJcdUE3MzciOiJhdSIsIlx1QTczOSI6ImF2IiwiXD0K dUE3M0IiOiJhdiIsIlx1QTczRCI6ImF5IiwiXHUyNEQxIjoiYiIsIlx1RkY0MiI6ImIiLCJcdTFF MDMiOiJiIiwiXHUxRTA1IjoiPQpiIiwiXHUxRTA3IjoiYiIsIlx1MDE4MCI6ImIiLCJcdTAxODMi OiJiIiwiXHUwMjUzIjoiYiIsIlx1MjREMiI6ImMiLCJcdUZGNDM9CiI6ImMiLCJcdTAxMDciOiJj IiwiXHUwMTA5IjoiYyIsIlx1MDEwQiI6ImMiLCJcdTAxMEQiOiJjIiwiXHUwMEU3IjoiYyIsIlx1 MT0KRTA5IjoiYyIsIlx1MDE4OCI6ImMiLCJcdTAyM0MiOiJjIiwiXHVBNzNGIjoiYyIsIlx1MjE4 NCI6ImMiLCJcdTI0RDMiOiJkIiwiPQpcdUZGNDQiOiJkIiwiXHUxRTBCIjoiZCIsIlx1MDEwRiI6 ImQiLCJcdTFFMEQiOiJkIiwiXHUxRTExIjoiZCIsIlx1MUUxMyI6ImQ9CiIsIlx1MUUwRiI6ImQi LCJcdTAxMTEiOiJkIiwiXHUwMThDIjoiZCIsIlx1MDI1NiI6ImQiLCJcdTAyNTciOiJkIiwiXHVB NzdBIj0KOiJkIiwiXHUwMUYzIjoiZHoiLCJcdTAxQzYiOiJkeiIsIlx1MjRENCI6ImUiLCJcdUZG NDUiOiJlIiwiXHUwMEU4IjoiZSIsIlx1PQowMEU5IjoiZSIsIlx1MDBFQSI6ImUiLCJcdTFFQzEi OiJlIiwiXHUxRUJGIjoiZSIsIlx1MUVDNSI6ImUiLCJcdTFFQzMiOiJlIiw9CiJcdTFFQkQiOiJl IiwiXHUwMTEzIjoiZSIsIlx1MUUxNSI6ImUiLCJcdTFFMTciOiJlIiwiXHUwMTE1IjoiZSIsIlx1 MDExNyI6Ij0KZSIsIlx1MDBFQiI6ImUiLCJcdTFFQkIiOiJlIiwiXHUwMTFCIjoiZSIsIlx1MDIw NSI6ImUiLCJcdTAyMDciOiJlIiwiXHUxRUI5PQoiOiJlIiwiXHUxRUM3IjoiZSIsIlx1MDIyOSI6 ImUiLCJcdTFFMUQiOiJlIiwiXHUwMTE5IjoiZSIsIlx1MUUxOSI6ImUiLCJcdTE9CkUxQiI6ImUi LCJcdTAyNDciOiJlIiwiXHUwMjVCIjoiZSIsIlx1MDFERCI6ImUiLCJcdTI0RDUiOiJmIiwiXHVG RjQ2IjoiZiIsIj0KXHUxRTFGIjoiZiIsIlx1MDE5MiI6ImYiLCJcdUE3N0MiOiJmIiwiXHUyNEQ2 IjoiZyIsIlx1RkY0NyI6ImciLCJcdTAxRjUiOiJnPQoiLCJcdTAxMUQiOiJnIiwiXHUxRTIxIjoi ZyIsIlx1MDExRiI6ImciLCJcdTAxMjEiOiJnIiwiXHUwMUU3IjoiZyIsIlx1MDEyMyI9CjoiZyIs Ilx1MDFFNSI6ImciLCJcdTAyNjAiOiJnIiwiXHVBN0ExIjoiZyIsIlx1MUQ3OSI6ImciLCJcdUE3 N0YiOiJnIiwiXHUyND0KRDciOiJoIiwiXHVGRjQ4IjoiaCIsIlx1MDEyNSI6ImgiLCJcdTFFMjMi OiJoIiwiXHUxRTI3IjoiaCIsIlx1MDIxRiI6ImgiLCJcPQp1MUUyNSI6ImgiLCJcdTFFMjkiOiJo IiwiXHUxRTJCIjoiaCIsIlx1MUU5NiI6ImgiLCJcdTAxMjciOiJoIiwiXHUyQzY4IjoiaCI9Ciwi XHUyQzc2IjoiaCIsIlx1MDI2NSI6ImgiLCJcdTAxOTUiOiJodiIsIlx1MjREOCI6ImkiLCJcdUZG NDkiOiJpIiwiXHUwMEVDIj0KOiJpIiwiXHUwMEVEIjoiaSIsIlx1MDBFRSI6ImkiLCJcdTAxMjki OiJpIiwiXHUwMTJCIjoiaSIsIlx1MDEyRCI6ImkiLCJcdTAwPQpFRiI6ImkiLCJcdTFFMkYiOiJp IiwiXHUxRUM5IjoiaSIsIlx1MDFEMCI6ImkiLCJcdTAyMDkiOiJpIiwiXHUwMjBCIjoiaSIsIlw9 CnUxRUNCIjoiaSIsIlx1MDEyRiI6ImkiLCJcdTFFMkQiOiJpIiwiXHUwMjY4IjoiaSIsIlx1MDEz MSI6ImkiLCJcdTI0RDkiOiJqIj0KLCJcdUZGNEEiOiJqIiwiXHUwMTM1IjoiaiIsIlx1MDFGMCI6 ImoiLCJcdTAyNDkiOiJqIiwiXHUyNERBIjoiayIsIlx1RkY0QiI6PQoiayIsIlx1MUUzMSI6Imsi LCJcdTAxRTkiOiJrIiwiXHUxRTMzIjoiayIsIlx1MDEzNyI6ImsiLCJcdTFFMzUiOiJrIiwiXHUw MTk9CjkiOiJrIiwiXHUyQzZBIjoiayIsIlx1QTc0MSI6ImsiLCJcdUE3NDMiOiJrIiwiXHVBNzQ1 IjoiayIsIlx1QTdBMyI6ImsiLCJcdT0KMjREQiI6ImwiLCJcdUZGNEMiOiJsIiwiXHUwMTQwIjoi bCIsIlx1MDEzQSI6ImwiLCJcdTAxM0UiOiJsIiwiXHUxRTM3IjoibCIsPQoiXHUxRTM5IjoibCIs Ilx1MDEzQyI6ImwiLCJcdTFFM0QiOiJsIiwiXHUxRTNCIjoibCIsIlx1MDE3RiI6ImwiLCJcdTAx NDIiOiI9CmwiLCJcdTAxOUEiOiJsIiwiXHUwMjZCIjoibCIsIlx1MkM2MSI6ImwiLCJcdUE3NDki OiJsIiwiXHVBNzgxIjoibCIsIlx1QTc0Nz0KIjoibCIsIlx1MDFDOSI6ImxqIiwiXHUyNERDIjoi bSIsIlx1RkY0RCI6Im0iLCJcdTFFM0YiOiJtIiwiXHUxRTQxIjoibSIsIlx1PQoxRTQzIjoibSIs Ilx1MDI3MSI6Im0iLCJcdTAyNkYiOiJtIiwiXHUyNEREIjoibiIsIlx1RkY0RSI6Im4iLCJcdTAx RjkiOiJuIiw9CiJcdTAxNDQiOiJuIiwiXHUwMEYxIjoibiIsIlx1MUU0NSI6Im4iLCJcdTAxNDgi OiJuIiwiXHUxRTQ3IjoibiIsIlx1MDE0NiI6Ij0KbiIsIlx1MUU0QiI6Im4iLCJcdTFFNDkiOiJu IiwiXHUwMTlFIjoibiIsIlx1MDI3MiI6Im4iLCJcdTAxNDkiOiJuIiwiXHVBNzkxPQoiOiJuIiwi XHVBN0E1IjoibiIsIlx1MDFDQyI6Im5qIiwiXHUyNERFIjoibyIsIlx1RkY0RiI6Im8iLCJcdTAw RjIiOiJvIiwiXHU9CjAwRjMiOiJvIiwiXHUwMEY0IjoibyIsIlx1MUVEMyI6Im8iLCJcdTFFRDEi OiJvIiwiXHUxRUQ3IjoibyIsIlx1MUVENSI6Im8iLD0KIlx1MDBGNSI6Im8iLCJcdTFFNEQiOiJv IiwiXHUwMjJEIjoibyIsIlx1MUU0RiI6Im8iLCJcdTAxNEQiOiJvIiwiXHUxRTUxIjoiPQpvIiwi XHUxRTUzIjoibyIsIlx1MDE0RiI6Im8iLCJcdTAyMkYiOiJvIiwiXHUwMjMxIjoibyIsIlx1MDBG NiI6Im8iLCJcdTAyMkI9CiI6Im8iLCJcdTFFQ0YiOiJvIiwiXHUwMTUxIjoibyIsIlx1MDFEMiI6 Im8iLCJcdTAyMEQiOiJvIiwiXHUwMjBGIjoibyIsIlx1MD0KMUExIjoibyIsIlx1MUVERCI6Im8i LCJcdTFFREIiOiJvIiwiXHUxRUUxIjoibyIsIlx1MUVERiI6Im8iLCJcdTFFRTMiOiJvIiwiPQpc dTFFQ0QiOiJvIiwiXHUxRUQ5IjoibyIsIlx1MDFFQiI6Im8iLCJcdTAxRUQiOiJvIiwiXHUwMEY4 IjoibyIsIlx1MDFGRiI6Im89CiIsIlx1MDI1NCI6Im8iLCJcdUE3NEIiOiJvIiwiXHVBNzREIjoi byIsIlx1MDI3NSI6Im8iLCJcdTAxQTMiOiJvaSIsIlx1MDIyMz0KIjoib3UiLCJcdUE3NEYiOiJv byIsIlx1MjRERiI6InAiLCJcdUZGNTAiOiJwIiwiXHUxRTU1IjoicCIsIlx1MUU1NyI6InAiLCJc PQp1MDFBNSI6InAiLCJcdTFEN0QiOiJwIiwiXHVBNzUxIjoicCIsIlx1QTc1MyI6InAiLCJcdUE3 NTUiOiJwIiwiXHUyNEUwIjoicSI9CiwiXHVGRjUxIjoicSIsIlx1MDI0QiI6InEiLCJcdUE3NTci OiJxIiwiXHVBNzU5IjoicSIsIlx1MjRFMSI6InIiLCJcdUZGNTIiOj0KInIiLCJcdTAxNTUiOiJy IiwiXHUxRTU5IjoiciIsIlx1MDE1OSI6InIiLCJcdTAyMTEiOiJyIiwiXHUwMjEzIjoiciIsIlx1 MUU1PQpCIjoiciIsIlx1MUU1RCI6InIiLCJcdTAxNTciOiJyIiwiXHUxRTVGIjoiciIsIlx1MDI0 RCI6InIiLCJcdTAyN0QiOiJyIiwiXHU9CkE3NUIiOiJyIiwiXHVBN0E3IjoiciIsIlx1QTc4MyI6 InIiLCJcdTI0RTIiOiJzIiwiXHVGRjUzIjoicyIsIlx1MDBERiI6InMiLD0KIlx1MDE1QiI6InMi LCJcdTFFNjUiOiJzIiwiXHUwMTVEIjoicyIsIlx1MUU2MSI6InMiLCJcdTAxNjEiOiJzIiwiXHUx RTY3IjoiPQpzIiwiXHUxRTYzIjoicyIsIlx1MUU2OSI6InMiLCJcdTAyMTkiOiJzIiwiXHUwMTVG IjoicyIsIlx1MDIzRiI6InMiLCJcdUE3QTk9CiI6InMiLCJcdUE3ODUiOiJzIiwiXHUxRTlCIjoi cyIsIlx1MjRFMyI6InQiLCJcdUZGNTQiOiJ0IiwiXHUxRTZCIjoidCIsIlx1MT0KRTk3IjoidCIs Ilx1MDE2NSI6InQiLCJcdTFFNkQiOiJ0IiwiXHUwMjFCIjoidCIsIlx1MDE2MyI6InQiLCJcdTFF NzEiOiJ0IiwiPQpcdTFFNkYiOiJ0IiwiXHUwMTY3IjoidCIsIlx1MDFBRCI6InQiLCJcdTAyODgi OiJ0IiwiXHUyQzY2IjoidCIsIlx1QTc4NyI6InQ9CiIsIlx1QTcyOSI6InR6IiwiXHUyNEU0Ijoi dSIsIlx1RkY1NSI6InUiLCJcdTAwRjkiOiJ1IiwiXHUwMEZBIjoidSIsIlx1MDBGQj0KIjoidSIs Ilx1MDE2OSI6InUiLCJcdTFFNzkiOiJ1IiwiXHUwMTZCIjoidSIsIlx1MUU3QiI6InUiLCJcdTAx NkQiOiJ1IiwiXHUwPQowRkMiOiJ1IiwiXHUwMURDIjoidSIsIlx1MDFEOCI6InUiLCJcdTAxRDYi OiJ1IiwiXHUwMURBIjoidSIsIlx1MUVFNyI6InUiLCI9Clx1MDE2RiI6InUiLCJcdTAxNzEiOiJ1 IiwiXHUwMUQ0IjoidSIsIlx1MDIxNSI6InUiLCJcdTAyMTciOiJ1IiwiXHUwMUIwIjoidT0KIiwi XHUxRUVCIjoidSIsIlx1MUVFOSI6InUiLCJcdTFFRUYiOiJ1IiwiXHUxRUVEIjoidSIsIlx1MUVG MSI6InUiLCJcdTFFRTUiPQo6InUiLCJcdTFFNzMiOiJ1IiwiXHUwMTczIjoidSIsIlx1MUU3NyI6 InUiLCJcdTFFNzUiOiJ1IiwiXHUwMjg5IjoidSIsIlx1MjQ9CkU1IjoidiIsIlx1RkY1NiI6InYi LCJcdTFFN0QiOiJ2IiwiXHUxRTdGIjoidiIsIlx1MDI4QiI6InYiLCJcdUE3NUYiOiJ2IiwiXD0K dTAyOEMiOiJ2IiwiXHVBNzYxIjoidnkiLCJcdTI0RTYiOiJ3IiwiXHVGRjU3IjoidyIsIlx1MUU4 MSI6InciLCJcdTFFODMiOiJ3PQoiLCJcdTAxNzUiOiJ3IiwiXHUxRTg3IjoidyIsIlx1MUU4NSI6 InciLCJcdTFFOTgiOiJ3IiwiXHUxRTg5IjoidyIsIlx1MkM3MyI9CjoidyIsIlx1MjRFNyI6Ingi LCJcdUZGNTgiOiJ4IiwiXHUxRThCIjoieCIsIlx1MUU4RCI6IngiLCJcdTI0RTgiOiJ5IiwiXHVG Rj0KNTkiOiJ5IiwiXHUxRUYzIjoieSIsIlx1MDBGRCI6InkiLCJcdTAxNzciOiJ5IiwiXHUxRUY5 IjoieSIsIlx1MDIzMyI6InkiLCJcPQp1MUU4RiI6InkiLCJcdTAwRkYiOiJ5IiwiXHUxRUY3Ijoi eSIsIlx1MUU5OSI6InkiLCJcdTFFRjUiOiJ5IiwiXHUwMUI0IjoieSI9CiwiXHUwMjRGIjoieSIs Ilx1MUVGRiI6InkiLCJcdTI0RTkiOiJ6IiwiXHVGRjVBIjoieiIsIlx1MDE3QSI6InoiLCJcdTFF OTEiOj0KInoiLCJcdTAxN0MiOiJ6IiwiXHUwMTdFIjoieiIsIlx1MUU5MyI6InoiLCJcdTFFOTUi OiJ6IiwiXHUwMUI2IjoieiIsIlx1MDIyPQo1IjoieiIsIlx1MDI0MCI6InoiLCJcdTJDNkMiOiJ6 IiwiXHVBNzYzIjoieiJ9OworICAgIERJQUNSSVRJQ1MgPTNEIHsiXHUyNEI2IjoiQSIsIlx1RkYy MSI6IkEiLCJcdTAwQzAiOiJBIiwiXHUwMEMxIjoiQSIsIlw9CnUwMEMyIjoiQSIsIlx1MUVBNiI6 IkEiLCJcdTFFQTQiOiJBIiwiXHUxRUFBIjoiQSIsIlx1MUVBOCI6IkEiLCJcdTAwQzMiOiJBIj0K LCJcdTAxMDAiOiJBIiwiXHUwMTAyIjoiQSIsIlx1MUVCMCI6IkEiLCJcdTFFQUUiOiJBIiwiXHUx RUI0IjoiQSIsIlx1MUVCMiI6PQoiQSIsIlx1MDIyNiI6IkEiLCJcdTAxRTAiOiJBIiwiXHUwMEM0 IjoiQSIsIlx1MDFERSI6IkEiLCJcdTFFQTIiOiJBIiwiXHUwMEM9CjUiOiJBIiwiXHUwMUZBIjoi QSIsIlx1MDFDRCI6IkEiLCJcdTAyMDAiOiJBIiwiXHUwMjAyIjoiQSIsIlx1MUVBMCI6IkEiLCJc dT0KMUVBQyI6IkEiLCJcdTFFQjYiOiJBIiwiXHUxRTAwIjoiQSIsIlx1MDEwNCI6IkEiLCJcdTAy M0EiOiJBIiwiXHUyQzZGIjoiQSIsPQoiXHVBNzMyIjoiQUEiLCJcdTAwQzYiOiJBRSIsIlx1MDFG QyI6IkFFIiwiXHUwMUUyIjoiQUUiLCJcdUE3MzQiOiJBTyIsIlx1QTc9CjM2IjoiQVUiLCJcdUE3 MzgiOiJBViIsIlx1QTczQSI6IkFWIiwiXHVBNzNDIjoiQVkiLCJcdTI0QjciOiJCIiwiXHVGRjIy IjoiQj0KIiwiXHUxRTAyIjoiQiIsIlx1MUUwNCI6IkIiLCJcdTFFMDYiOiJCIiwiXHUwMjQzIjoi QiIsIlx1MDE4MiI6IkIiLCJcdTAxODEiPQo6IkIiLCJcdTI0QjgiOiJDIiwiXHVGRjIzIjoiQyIs Ilx1MDEwNiI6IkMiLCJcdTAxMDgiOiJDIiwiXHUwMTBBIjoiQyIsIlx1MDE9CjBDIjoiQyIsIlx1 MDBDNyI6IkMiLCJcdTFFMDgiOiJDIiwiXHUwMTg3IjoiQyIsIlx1MDIzQiI6IkMiLCJcdUE3M0Ui OiJDIiwiXD0KdTI0QjkiOiJEIiwiXHVGRjI0IjoiRCIsIlx1MUUwQSI6IkQiLCJcdTAxMEUiOiJE IiwiXHUxRTBDIjoiRCIsIlx1MUUxMCI6IkQiPQosIlx1MUUxMiI6IkQiLCJcdTFFMEUiOiJEIiwi XHUwMTEwIjoiRCIsIlx1MDE4QiI6IkQiLCJcdTAxOEEiOiJEIiwiXHUwMTg5Ijo9CiJEIiwiXHVB Nzc5IjoiRCIsIlx1MDFGMSI6IkRaIiwiXHUwMUM0IjoiRFoiLCJcdTAxRjIiOiJEeiIsIlx1MDFD NSI6IkR6IiwiXD0KdTI0QkEiOiJFIiwiXHVGRjI1IjoiRSIsIlx1MDBDOCI6IkUiLCJcdTAwQzki OiJFIiwiXHUwMENBIjoiRSIsIlx1MUVDMCI6IkUiPQosIlx1MUVCRSI6IkUiLCJcdTFFQzQiOiJF IiwiXHUxRUMyIjoiRSIsIlx1MUVCQyI6IkUiLCJcdTAxMTIiOiJFIiwiXHUxRTE0Ijo9CiJFIiwi XHUxRTE2IjoiRSIsIlx1MDExNCI6IkUiLCJcdTAxMTYiOiJFIiwiXHUwMENCIjoiRSIsIlx1MUVC QSI6IkUiLCJcdTAxMT0KQSI6IkUiLCJcdTAyMDQiOiJFIiwiXHUwMjA2IjoiRSIsIlx1MUVCOCI6 IkUiLCJcdTFFQzYiOiJFIiwiXHUwMjI4IjoiRSIsIlx1PQoxRTFDIjoiRSIsIlx1MDExOCI6IkUi LCJcdTFFMTgiOiJFIiwiXHUxRTFBIjoiRSIsIlx1MDE5MCI6IkUiLCJcdTAxOEUiOiJFIiw9CiJc dTI0QkIiOiJGIiwiXHVGRjI2IjoiRiIsIlx1MUUxRSI6IkYiLCJcdTAxOTEiOiJGIiwiXHVBNzdC IjoiRiIsIlx1MjRCQyI6Ij0KRyIsIlx1RkYyNyI6IkciLCJcdTAxRjQiOiJHIiwiXHUwMTFDIjoi RyIsIlx1MUUyMCI6IkciLCJcdTAxMUUiOiJHIiwiXHUwMTIwPQoiOiJHIiwiXHUwMUU2IjoiRyIs Ilx1MDEyMiI6IkciLCJcdTAxRTQiOiJHIiwiXHUwMTkzIjoiRyIsIlx1QTdBMCI6IkciLCJcdUE9 Cjc3RCI6IkciLCJcdUE3N0UiOiJHIiwiXHUyNEJEIjoiSCIsIlx1RkYyOCI6IkgiLCJcdTAxMjQi OiJIIiwiXHUxRTIyIjoiSCIsIj0KXHUxRTI2IjoiSCIsIlx1MDIxRSI6IkgiLCJcdTFFMjQiOiJI IiwiXHUxRTI4IjoiSCIsIlx1MUUyQSI6IkgiLCJcdTAxMjYiOiJIPQoiLCJcdTJDNjciOiJIIiwi XHUyQzc1IjoiSCIsIlx1QTc4RCI6IkgiLCJcdTI0QkUiOiJJIiwiXHVGRjI5IjoiSSIsIlx1MDBD QyI9CjoiSSIsIlx1MDBDRCI6IkkiLCJcdTAwQ0UiOiJJIiwiXHUwMTI4IjoiSSIsIlx1MDEyQSI6 IkkiLCJcdTAxMkMiOiJJIiwiXHUwMT0KMzAiOiJJIiwiXHUwMENGIjoiSSIsIlx1MUUyRSI6Ikki LCJcdTFFQzgiOiJJIiwiXHUwMUNGIjoiSSIsIlx1MDIwOCI6IkkiLCJcPQp1MDIwQSI6IkkiLCJc dTFFQ0EiOiJJIiwiXHUwMTJFIjoiSSIsIlx1MUUyQyI6IkkiLCJcdTAxOTciOiJJIiwiXHUyNEJG IjoiSiI9CiwiXHVGRjJBIjoiSiIsIlx1MDEzNCI6IkoiLCJcdTAyNDgiOiJKIiwiXHUyNEMwIjoi SyIsIlx1RkYyQiI6IksiLCJcdTFFMzAiOj0KIksiLCJcdTAxRTgiOiJLIiwiXHUxRTMyIjoiSyIs Ilx1MDEzNiI6IksiLCJcdTFFMzQiOiJLIiwiXHUwMTk4IjoiSyIsIlx1MkM2PQo5IjoiSyIsIlx1 QTc0MCI6IksiLCJcdUE3NDIiOiJLIiwiXHVBNzQ0IjoiSyIsIlx1QTdBMiI6IksiLCJcdTI0QzEi OiJMIiwiXHU9CkZGMkMiOiJMIiwiXHUwMTNGIjoiTCIsIlx1MDEzOSI6IkwiLCJcdTAxM0QiOiJM IiwiXHUxRTM2IjoiTCIsIlx1MUUzOCI6IkwiLD0KIlx1MDEzQiI6IkwiLCJcdTFFM0MiOiJMIiwi XHUxRTNBIjoiTCIsIlx1MDE0MSI6IkwiLCJcdTAyM0QiOiJMIiwiXHUyQzYyIjoiPQpMIiwiXHUy QzYwIjoiTCIsIlx1QTc0OCI6IkwiLCJcdUE3NDYiOiJMIiwiXHVBNzgwIjoiTCIsIlx1MDFDNyI6 IkxKIiwiXHUwMUM9CjgiOiJMaiIsIlx1MjRDMiI6Ik0iLCJcdUZGMkQiOiJNIiwiXHUxRTNFIjoi TSIsIlx1MUU0MCI6Ik0iLCJcdTFFNDIiOiJNIiwiXD0KdTJDNkUiOiJNIiwiXHUwMTlDIjoiTSIs Ilx1MjRDMyI6Ik4iLCJcdUZGMkUiOiJOIiwiXHUwMUY4IjoiTiIsIlx1MDE0MyI6Ik4iPQosIlx1 MDBEMSI6Ik4iLCJcdTFFNDQiOiJOIiwiXHUwMTQ3IjoiTiIsIlx1MUU0NiI6Ik4iLCJcdTAxNDUi OiJOIiwiXHUxRTRBIjo9CiJOIiwiXHUxRTQ4IjoiTiIsIlx1MDIyMCI6Ik4iLCJcdTAxOUQiOiJO IiwiXHVBNzkwIjoiTiIsIlx1QTdBNCI6Ik4iLCJcdTAxQz0KQSI6Ik5KIiwiXHUwMUNCIjoiTmoi LCJcdTI0QzQiOiJPIiwiXHVGRjJGIjoiTyIsIlx1MDBEMiI6Ik8iLCJcdTAwRDMiOiJPIiwiPQpc dTAwRDQiOiJPIiwiXHUxRUQyIjoiTyIsIlx1MUVEMCI6Ik8iLCJcdTFFRDYiOiJPIiwiXHUxRUQ0 IjoiTyIsIlx1MDBENSI6Ik89CiIsIlx1MUU0QyI6Ik8iLCJcdTAyMkMiOiJPIiwiXHUxRTRFIjoi TyIsIlx1MDE0QyI6Ik8iLCJcdTFFNTAiOiJPIiwiXHUxRTUyIj0KOiJPIiwiXHUwMTRFIjoiTyIs Ilx1MDIyRSI6Ik8iLCJcdTAyMzAiOiJPIiwiXHUwMEQ2IjoiTyIsIlx1MDIyQSI6Ik8iLCJcdTFF PQpDRSI6Ik8iLCJcdTAxNTAiOiJPIiwiXHUwMUQxIjoiTyIsIlx1MDIwQyI6Ik8iLCJcdTAyMEUi OiJPIiwiXHUwMUEwIjoiTyIsIlw9CnUxRURDIjoiTyIsIlx1MUVEQSI6Ik8iLCJcdTFFRTAiOiJP IiwiXHUxRURFIjoiTyIsIlx1MUVFMiI6Ik8iLCJcdTFFQ0MiOiJPIj0KLCJcdTFFRDgiOiJPIiwi XHUwMUVBIjoiTyIsIlx1MDFFQyI6Ik8iLCJcdTAwRDgiOiJPIiwiXHUwMUZFIjoiTyIsIlx1MDE4 NiI6PQoiTyIsIlx1MDE5RiI6Ik8iLCJcdUE3NEEiOiJPIiwiXHVBNzRDIjoiTyIsIlx1MDFBMiI6 Ik9JIiwiXHVBNzRFIjoiT08iLCJcdTA9CjIyMiI6Ik9VIiwiXHUyNEM1IjoiUCIsIlx1RkYzMCI6 IlAiLCJcdTFFNTQiOiJQIiwiXHUxRTU2IjoiUCIsIlx1MDFBNCI6IlAiLD0KIlx1MkM2MyI6IlAi LCJcdUE3NTAiOiJQIiwiXHVBNzUyIjoiUCIsIlx1QTc1NCI6IlAiLCJcdTI0QzYiOiJRIiwiXHVG RjMxIjoiPQpRIiwiXHVBNzU2IjoiUSIsIlx1QTc1OCI6IlEiLCJcdTAyNEEiOiJRIiwiXHUyNEM3 IjoiUiIsIlx1RkYzMiI6IlIiLCJcdTAxNTQ9CiI6IlIiLCJcdTFFNTgiOiJSIiwiXHUwMTU4Ijoi UiIsIlx1MDIxMCI6IlIiLCJcdTAyMTIiOiJSIiwiXHUxRTVBIjoiUiIsIlx1MT0KRTVDIjoiUiIs Ilx1MDE1NiI6IlIiLCJcdTFFNUUiOiJSIiwiXHUwMjRDIjoiUiIsIlx1MkM2NCI6IlIiLCJcdUE3 NUEiOiJSIiwiPQpcdUE3QTYiOiJSIiwiXHVBNzgyIjoiUiIsIlx1MjRDOCI6IlMiLCJcdUZGMzMi OiJTIiwiXHUxRTlFIjoiUyIsIlx1MDE1QSI6IlM9CiIsIlx1MUU2NCI6IlMiLCJcdTAxNUMiOiJT IiwiXHUxRTYwIjoiUyIsIlx1MDE2MCI6IlMiLCJcdTFFNjYiOiJTIiwiXHUxRTYyIj0KOiJTIiwi XHUxRTY4IjoiUyIsIlx1MDIxOCI6IlMiLCJcdTAxNUUiOiJTIiwiXHUyQzdFIjoiUyIsIlx1QTdB OCI6IlMiLCJcdUE3PQo4NCI6IlMiLCJcdTI0QzkiOiJUIiwiXHVGRjM0IjoiVCIsIlx1MUU2QSI6 IlQiLCJcdTAxNjQiOiJUIiwiXHUxRTZDIjoiVCIsIlw9CnUwMjFBIjoiVCIsIlx1MDE2MiI6IlQi LCJcdTFFNzAiOiJUIiwiXHUxRTZFIjoiVCIsIlx1MDE2NiI6IlQiLCJcdTAxQUMiOiJUIj0KLCJc dTAxQUUiOiJUIiwiXHUwMjNFIjoiVCIsIlx1QTc4NiI6IlQiLCJcdUE3MjgiOiJUWiIsIlx1MjRD QSI6IlUiLCJcdUZGMzUiPQo6IlUiLCJcdTAwRDkiOiJVIiwiXHUwMERBIjoiVSIsIlx1MDBEQiI6 IlUiLCJcdTAxNjgiOiJVIiwiXHUxRTc4IjoiVSIsIlx1MDE9CjZBIjoiVSIsIlx1MUU3QSI6IlUi LCJcdTAxNkMiOiJVIiwiXHUwMERDIjoiVSIsIlx1MDFEQiI6IlUiLCJcdTAxRDciOiJVIiwiXD0K dTAxRDUiOiJVIiwiXHUwMUQ5IjoiVSIsIlx1MUVFNiI6IlUiLCJcdTAxNkUiOiJVIiwiXHUwMTcw IjoiVSIsIlx1MDFEMyI6IlUiPQosIlx1MDIxNCI6IlUiLCJcdTAyMTYiOiJVIiwiXHUwMUFGIjoi VSIsIlx1MUVFQSI6IlUiLCJcdTFFRTgiOiJVIiwiXHUxRUVFIjo9CiJVIiwiXHUxRUVDIjoiVSIs Ilx1MUVGMCI6IlUiLCJcdTFFRTQiOiJVIiwiXHUxRTcyIjoiVSIsIlx1MDE3MiI6IlUiLCJcdTFF Nz0KNiI6IlUiLCJcdTFFNzQiOiJVIiwiXHUwMjQ0IjoiVSIsIlx1MjRDQiI6IlYiLCJcdUZGMzYi OiJWIiwiXHUxRTdDIjoiViIsIlx1PQoxRTdFIjoiViIsIlx1MDFCMiI6IlYiLCJcdUE3NUUiOiJW IiwiXHUwMjQ1IjoiViIsIlx1QTc2MCI6IlZZIiwiXHUyNENDIjoiVyI9CiwiXHVGRjM3IjoiVyIs Ilx1MUU4MCI6IlciLCJcdTFFODIiOiJXIiwiXHUwMTc0IjoiVyIsIlx1MUU4NiI6IlciLCJcdTFF ODQiOj0KIlciLCJcdTFFODgiOiJXIiwiXHUyQzcyIjoiVyIsIlx1MjRDRCI6IlgiLCJcdUZGMzgi OiJYIiwiXHUxRThBIjoiWCIsIlx1MUU4PQpDIjoiWCIsIlx1MjRDRSI6IlkiLCJcdUZGMzkiOiJZ IiwiXHUxRUYyIjoiWSIsIlx1MDBERCI6IlkiLCJcdTAxNzYiOiJZIiwiXHU9CjFFRjgiOiJZIiwi XHUwMjMyIjoiWSIsIlx1MUU4RSI6IlkiLCJcdTAxNzgiOiJZIiwiXHUxRUY2IjoiWSIsIlx1MUVG NCI6IlkiLD0KIlx1MDFCMyI6IlkiLCJcdTAyNEUiOiJZIiwiXHUxRUZFIjoiWSIsIlx1MjRDRiI6 IloiLCJcdUZGM0EiOiJaIiwiXHUwMTc5IjoiPQpaIiwiXHUxRTkwIjoiWiIsIlx1MDE3QiI6Iloi LCJcdTAxN0QiOiJaIiwiXHUxRTkyIjoiWiIsIlx1MUU5NCI6IloiLCJcdTAxQjU9CiI6IloiLCJc dTAyMjQiOiJaIiwiXHUyQzdGIjoiWiIsIlx1MkM2QiI6IloiLCJcdUE3NjIiOiJaIiwiXHUyNEQw IjoiYSIsIlx1Rj0KRjQxIjoiYSIsIlx1MUU5QSI6ImEiLCJcdTAwRTAiOiJhIiwiXHUwMEUxIjoi YSIsIlx1MDBFMiI6ImEiLCJcdTFFQTciOiJhIiwiPQpcdTFFQTUiOiJhIiwiXHUxRUFCIjoiYSIs Ilx1MUVBOSI6ImEiLCJcdTAwRTMiOiJhIiwiXHUwMTAxIjoiYSIsIlx1MDEwMyI6ImE9CiIsIlx1 MUVCMSI6ImEiLCJcdTFFQUYiOiJhIiwiXHUxRUI1IjoiYSIsIlx1MUVCMyI6ImEiLCJcdTAyMjci OiJhIiwiXHUwMUUxIj0KOiJhIiwiXHUwMEU0IjoiYSIsIlx1MDFERiI6ImEiLCJcdTFFQTMiOiJh IiwiXHUwMEU1IjoiYSIsIlx1MDFGQiI6ImEiLCJcdTAxPQpDRSI6ImEiLCJcdTAyMDEiOiJhIiwi XHUwMjAzIjoiYSIsIlx1MUVBMSI6ImEiLCJcdTFFQUQiOiJhIiwiXHUxRUI3IjoiYSIsIlw9CnUx RTAxIjoiYSIsIlx1MDEwNSI6ImEiLCJcdTJDNjUiOiJhIiwiXHUwMjUwIjoiYSIsIlx1QTczMyI6 ImFhIiwiXHUwMEU2IjoiYT0KZSIsIlx1MDFGRCI6ImFlIiwiXHUwMUUzIjoiYWUiLCJcdUE3MzUi OiJhbyIsIlx1QTczNyI6ImF1IiwiXHVBNzM5IjoiYXYiLCJcPQp1QTczQiI6ImF2IiwiXHVBNzNE IjoiYXkiLCJcdTI0RDEiOiJiIiwiXHVGRjQyIjoiYiIsIlx1MUUwMyI6ImIiLCJcdTFFMDUiOiI9 CmIiLCJcdTFFMDciOiJiIiwiXHUwMTgwIjoiYiIsIlx1MDE4MyI6ImIiLCJcdTAyNTMiOiJiIiwi XHUyNEQyIjoiYyIsIlx1RkY0Mz0KIjoiYyIsIlx1MDEwNyI6ImMiLCJcdTAxMDkiOiJjIiwiXHUw MTBCIjoiYyIsIlx1MDEwRCI6ImMiLCJcdTAwRTciOiJjIiwiXHUxPQpFMDkiOiJjIiwiXHUwMTg4 IjoiYyIsIlx1MDIzQyI6ImMiLCJcdUE3M0YiOiJjIiwiXHUyMTg0IjoiYyIsIlx1MjREMyI6ImQi LCI9Clx1RkY0NCI6ImQiLCJcdTFFMEIiOiJkIiwiXHUwMTBGIjoiZCIsIlx1MUUwRCI6ImQiLCJc dTFFMTEiOiJkIiwiXHUxRTEzIjoiZD0KIiwiXHUxRTBGIjoiZCIsIlx1MDExMSI6ImQiLCJcdTAx OEMiOiJkIiwiXHUwMjU2IjoiZCIsIlx1MDI1NyI6ImQiLCJcdUE3N0EiPQo6ImQiLCJcdTAxRjMi OiJkeiIsIlx1MDFDNiI6ImR6IiwiXHUyNEQ0IjoiZSIsIlx1RkY0NSI6ImUiLCJcdTAwRTgiOiJl IiwiXHU9CjAwRTkiOiJlIiwiXHUwMEVBIjoiZSIsIlx1MUVDMSI6ImUiLCJcdTFFQkYiOiJlIiwi XHUxRUM1IjoiZSIsIlx1MUVDMyI6ImUiLD0KIlx1MUVCRCI6ImUiLCJcdTAxMTMiOiJlIiwiXHUx RTE1IjoiZSIsIlx1MUUxNyI6ImUiLCJcdTAxMTUiOiJlIiwiXHUwMTE3IjoiPQplIiwiXHUwMEVC IjoiZSIsIlx1MUVCQiI6ImUiLCJcdTAxMUIiOiJlIiwiXHUwMjA1IjoiZSIsIlx1MDIwNyI6ImUi LCJcdTFFQjk9CiI6ImUiLCJcdTFFQzciOiJlIiwiXHUwMjI5IjoiZSIsIlx1MUUxRCI6ImUiLCJc dTAxMTkiOiJlIiwiXHUxRTE5IjoiZSIsIlx1MT0KRTFCIjoiZSIsIlx1MDI0NyI6ImUiLCJcdTAy NUIiOiJlIiwiXHUwMUREIjoiZSIsIlx1MjRENSI6ImYiLCJcdUZGNDYiOiJmIiwiPQpcdTFFMUYi OiJmIiwiXHUwMTkyIjoiZiIsIlx1QTc3QyI6ImYiLCJcdTI0RDYiOiJnIiwiXHVGRjQ3IjoiZyIs Ilx1MDFGNSI6Imc9CiIsIlx1MDExRCI6ImciLCJcdTFFMjEiOiJnIiwiXHUwMTFGIjoiZyIsIlx1 MDEyMSI6ImciLCJcdTAxRTciOiJnIiwiXHUwMTIzIj0KOiJnIiwiXHUwMUU1IjoiZyIsIlx1MDI2 MCI6ImciLCJcdUE3QTEiOiJnIiwiXHUxRDc5IjoiZyIsIlx1QTc3RiI6ImciLCJcdTI0PQpENyI6 ImgiLCJcdUZGNDgiOiJoIiwiXHUwMTI1IjoiaCIsIlx1MUUyMyI6ImgiLCJcdTFFMjciOiJoIiwi XHUwMjFGIjoiaCIsIlw9CnUxRTI1IjoiaCIsIlx1MUUyOSI6ImgiLCJcdTFFMkIiOiJoIiwiXHUx RTk2IjoiaCIsIlx1MDEyNyI6ImgiLCJcdTJDNjgiOiJoIj0KLCJcdTJDNzYiOiJoIiwiXHUwMjY1 IjoiaCIsIlx1MDE5NSI6Imh2IiwiXHUyNEQ4IjoiaSIsIlx1RkY0OSI6ImkiLCJcdTAwRUMiPQo6 ImkiLCJcdTAwRUQiOiJpIiwiXHUwMEVFIjoiaSIsIlx1MDEyOSI6ImkiLCJcdTAxMkIiOiJpIiwi XHUwMTJEIjoiaSIsIlx1MDA9CkVGIjoiaSIsIlx1MUUyRiI6ImkiLCJcdTFFQzkiOiJpIiwiXHUw MUQwIjoiaSIsIlx1MDIwOSI6ImkiLCJcdTAyMEIiOiJpIiwiXD0KdTFFQ0IiOiJpIiwiXHUwMTJG IjoiaSIsIlx1MUUyRCI6ImkiLCJcdTAyNjgiOiJpIiwiXHUwMTMxIjoiaSIsIlx1MjREOSI6Imoi PQosIlx1RkY0QSI6ImoiLCJcdTAxMzUiOiJqIiwiXHUwMUYwIjoiaiIsIlx1MDI0OSI6ImoiLCJc dTI0REEiOiJrIiwiXHVGRjRCIjo9CiJrIiwiXHUxRTMxIjoiayIsIlx1MDFFOSI6ImsiLCJcdTFF MzMiOiJrIiwiXHUwMTM3IjoiayIsIlx1MUUzNSI6ImsiLCJcdTAxOT0KOSI6ImsiLCJcdTJDNkEi OiJrIiwiXHVBNzQxIjoiayIsIlx1QTc0MyI6ImsiLCJcdUE3NDUiOiJrIiwiXHVBN0EzIjoiayIs Ilx1PQoyNERCIjoibCIsIlx1RkY0QyI6ImwiLCJcdTAxNDAiOiJsIiwiXHUwMTNBIjoibCIsIlx1 MDEzRSI6ImwiLCJcdTFFMzciOiJsIiw9CiJcdTFFMzkiOiJsIiwiXHUwMTNDIjoibCIsIlx1MUUz RCI6ImwiLCJcdTFFM0IiOiJsIiwiXHUwMTdGIjoibCIsIlx1MDE0MiI6Ij0KbCIsIlx1MDE5QSI6 ImwiLCJcdTAyNkIiOiJsIiwiXHUyQzYxIjoibCIsIlx1QTc0OSI6ImwiLCJcdUE3ODEiOiJsIiwi XHVBNzQ3PQoiOiJsIiwiXHUwMUM5IjoibGoiLCJcdTI0REMiOiJtIiwiXHVGRjREIjoibSIsIlx1 MUUzRiI6Im0iLCJcdTFFNDEiOiJtIiwiXHU9CjFFNDMiOiJtIiwiXHUwMjcxIjoibSIsIlx1MDI2 RiI6Im0iLCJcdTI0REQiOiJuIiwiXHVGRjRFIjoibiIsIlx1MDFGOSI6Im4iLD0KIlx1MDE0NCI6 Im4iLCJcdTAwRjEiOiJuIiwiXHUxRTQ1IjoibiIsIlx1MDE0OCI6Im4iLCJcdTFFNDciOiJuIiwi XHUwMTQ2IjoiPQpuIiwiXHUxRTRCIjoibiIsIlx1MUU0OSI6Im4iLCJcdTAxOUUiOiJuIiwiXHUw MjcyIjoibiIsIlx1MDE0OSI6Im4iLCJcdUE3OTE9CiI6Im4iLCJcdUE3QTUiOiJuIiwiXHUwMUND IjoibmoiLCJcdTI0REUiOiJvIiwiXHVGRjRGIjoibyIsIlx1MDBGMiI6Im8iLCJcdT0KMDBGMyI6 Im8iLCJcdTAwRjQiOiJvIiwiXHUxRUQzIjoibyIsIlx1MUVEMSI6Im8iLCJcdTFFRDciOiJvIiwi XHUxRUQ1IjoibyIsPQoiXHUwMEY1IjoibyIsIlx1MUU0RCI6Im8iLCJcdTAyMkQiOiJvIiwiXHUx RTRGIjoibyIsIlx1MDE0RCI6Im8iLCJcdTFFNTEiOiI9Cm8iLCJcdTFFNTMiOiJvIiwiXHUwMTRG IjoibyIsIlx1MDIyRiI6Im8iLCJcdTAyMzEiOiJvIiwiXHUwMEY2IjoibyIsIlx1MDIyQj0KIjoi byIsIlx1MUVDRiI6Im8iLCJcdTAxNTEiOiJvIiwiXHUwMUQyIjoibyIsIlx1MDIwRCI6Im8iLCJc dTAyMEYiOiJvIiwiXHUwPQoxQTEiOiJvIiwiXHUxRUREIjoibyIsIlx1MUVEQiI6Im8iLCJcdTFF RTEiOiJvIiwiXHUxRURGIjoibyIsIlx1MUVFMyI6Im8iLCI9Clx1MUVDRCI6Im8iLCJcdTFFRDki OiJvIiwiXHUwMUVCIjoibyIsIlx1MDFFRCI6Im8iLCJcdTAwRjgiOiJvIiwiXHUwMUZGIjoibz0K IiwiXHUwMjU0IjoibyIsIlx1QTc0QiI6Im8iLCJcdUE3NEQiOiJvIiwiXHUwMjc1IjoibyIsIlx1 MDFBMyI6Im9pIiwiXHUwMjIzPQoiOiJvdSIsIlx1QTc0RiI6Im9vIiwiXHUyNERGIjoicCIsIlx1 RkY1MCI6InAiLCJcdTFFNTUiOiJwIiwiXHUxRTU3IjoicCIsIlw9CnUwMUE1IjoicCIsIlx1MUQ3 RCI6InAiLCJcdUE3NTEiOiJwIiwiXHVBNzUzIjoicCIsIlx1QTc1NSI6InAiLCJcdTI0RTAiOiJx Ij0KLCJcdUZGNTEiOiJxIiwiXHUwMjRCIjoicSIsIlx1QTc1NyI6InEiLCJcdUE3NTkiOiJxIiwi XHUyNEUxIjoiciIsIlx1RkY1MiI6PQoiciIsIlx1MDE1NSI6InIiLCJcdTFFNTkiOiJyIiwiXHUw MTU5IjoiciIsIlx1MDIxMSI6InIiLCJcdTAyMTMiOiJyIiwiXHUxRTU9CkIiOiJyIiwiXHUxRTVE IjoiciIsIlx1MDE1NyI6InIiLCJcdTFFNUYiOiJyIiwiXHUwMjREIjoiciIsIlx1MDI3RCI6InIi LCJcdT0KQTc1QiI6InIiLCJcdUE3QTciOiJyIiwiXHVBNzgzIjoiciIsIlx1MjRFMiI6InMiLCJc dUZGNTMiOiJzIiwiXHUwMERGIjoicyIsPQoiXHUwMTVCIjoicyIsIlx1MUU2NSI6InMiLCJcdTAx NUQiOiJzIiwiXHUxRTYxIjoicyIsIlx1MDE2MSI6InMiLCJcdTFFNjciOiI9CnMiLCJcdTFFNjMi OiJzIiwiXHUxRTY5IjoicyIsIlx1MDIxOSI6InMiLCJcdTAxNUYiOiJzIiwiXHUwMjNGIjoicyIs Ilx1QTdBOT0KIjoicyIsIlx1QTc4NSI6InMiLCJcdTFFOUIiOiJzIiwiXHUyNEUzIjoidCIsIlx1 RkY1NCI6InQiLCJcdTFFNkIiOiJ0IiwiXHUxPQpFOTciOiJ0IiwiXHUwMTY1IjoidCIsIlx1MUU2 RCI6InQiLCJcdTAyMUIiOiJ0IiwiXHUwMTYzIjoidCIsIlx1MUU3MSI6InQiLCI9Clx1MUU2RiI6 InQiLCJcdTAxNjciOiJ0IiwiXHUwMUFEIjoidCIsIlx1MDI4OCI6InQiLCJcdTJDNjYiOiJ0Iiwi XHVBNzg3IjoidD0KIiwiXHVBNzI5IjoidHoiLCJcdTI0RTQiOiJ1IiwiXHVGRjU1IjoidSIsIlx1 MDBGOSI6InUiLCJcdTAwRkEiOiJ1IiwiXHUwMEZCPQoiOiJ1IiwiXHUwMTY5IjoidSIsIlx1MUU3 OSI6InUiLCJcdTAxNkIiOiJ1IiwiXHUxRTdCIjoidSIsIlx1MDE2RCI6InUiLCJcdTA9CjBGQyI6 InUiLCJcdTAxREMiOiJ1IiwiXHUwMUQ4IjoidSIsIlx1MDFENiI6InUiLCJcdTAxREEiOiJ1Iiwi XHUxRUU3IjoidSIsIj0KXHUwMTZGIjoidSIsIlx1MDE3MSI6InUiLCJcdTAxRDQiOiJ1IiwiXHUw MjE1IjoidSIsIlx1MDIxNyI6InUiLCJcdTAxQjAiOiJ1PQoiLCJcdTFFRUIiOiJ1IiwiXHUxRUU5 IjoidSIsIlx1MUVFRiI6InUiLCJcdTFFRUQiOiJ1IiwiXHUxRUYxIjoidSIsIlx1MUVFNSI9Cjoi dSIsIlx1MUU3MyI6InUiLCJcdTAxNzMiOiJ1IiwiXHUxRTc3IjoidSIsIlx1MUU3NSI6InUiLCJc dTAyODkiOiJ1IiwiXHUyND0KRTUiOiJ2IiwiXHVGRjU2IjoidiIsIlx1MUU3RCI6InYiLCJcdTFF N0YiOiJ2IiwiXHUwMjhCIjoidiIsIlx1QTc1RiI6InYiLCJcPQp1MDI4QyI6InYiLCJcdUE3NjEi OiJ2eSIsIlx1MjRFNiI6InciLCJcdUZGNTciOiJ3IiwiXHUxRTgxIjoidyIsIlx1MUU4MyI6Inc9 CiIsIlx1MDE3NSI6InciLCJcdTFFODciOiJ3IiwiXHUxRTg1IjoidyIsIlx1MUU5OCI6InciLCJc dTFFODkiOiJ3IiwiXHUyQzczIj0KOiJ3IiwiXHUyNEU3IjoieCIsIlx1RkY1OCI6IngiLCJcdTFF OEIiOiJ4IiwiXHUxRThEIjoieCIsIlx1MjRFOCI6InkiLCJcdUZGPQo1OSI6InkiLCJcdTFFRjMi OiJ5IiwiXHUwMEZEIjoieSIsIlx1MDE3NyI6InkiLCJcdTFFRjkiOiJ5IiwiXHUwMjMzIjoieSIs Ilw9CnUxRThGIjoieSIsIlx1MDBGRiI6InkiLCJcdTFFRjciOiJ5IiwiXHUxRTk5IjoieSIsIlx1 MUVGNSI6InkiLCJcdTAxQjQiOiJ5Ij0KLCJcdTAyNEYiOiJ5IiwiXHUxRUZGIjoieSIsIlx1MjRF OSI6InoiLCJcdUZGNUEiOiJ6IiwiXHUwMTdBIjoieiIsIlx1MUU5MSI6PQoieiIsIlx1MDE3QyI6 InoiLCJcdTAxN0UiOiJ6IiwiXHUxRTkzIjoieiIsIlx1MUU5NSI6InoiLCJcdTAxQjYiOiJ6Iiwi XHUwMjI9CjUiOiJ6IiwiXHUwMjQwIjoieiIsIlx1MkM2QyI6InoiLCJcdUE3NjMiOiJ6IiwiXHUw Mzg2IjoiXHUwMzkxIiwiXHUwMzg4IjoiXD0KdTAzOTUiLCJcdTAzODkiOiJcdTAzOTciLCJcdTAz OEEiOiJcdTAzOTkiLCJcdTAzQUEiOiJcdTAzOTkiLCJcdTAzOEMiOiJcdTAzPQo5RiIsIlx1MDM4 RSI6Ilx1MDNBNSIsIlx1MDNBQiI6Ilx1MDNBNSIsIlx1MDM4RiI6Ilx1MDNBOSIsIlx1MDNBQyI6 Ilx1MDNCMSI9CiwiXHUwM0FEIjoiXHUwM0I1IiwiXHUwM0FFIjoiXHUwM0I3IiwiXHUwM0FGIjoi XHUwM0I5IiwiXHUwM0NBIjoiXHUwM0I5IiwiXD0KdTAzOTAiOiJcdTAzQjkiLCJcdTAzQ0MiOiJc dTAzQkYiLCJcdTAzQ0QiOiJcdTAzQzUiLCJcdTAzQ0IiOiJcdTAzQzUiLCJcdTAzPQpCMCI6Ilx1 MDNDNSIsIlx1MDNDOSI6Ilx1MDNDOSIsIlx1MDNDMiI6Ilx1MDNDMyJ9Owo9MjAKICAgICAkZG9j dW1lbnQgPTNEICQoZG9jdW1lbnQpOwo9MjAKICAgICBuZXh0VWlkPTNEKGZ1bmN0aW9uKCkgeyB2 YXIgY291bnRlcj0zRDE7IHJldHVybiBmdW5jdGlvbigpIHsgcmV0dXJuIGNvPQp1bnRlcisrOyB9 OyB9KCkpOwo9MjAKPTIwCisgICAgZnVuY3Rpb24gcmVpbnNlcnRFbGVtZW50KGVsZW1lbnQpIHsK KyAgICAgICAgdmFyIHBsYWNlaG9sZGVyID0zRCAkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcn KSk7CisKKyAgICAgICAgZWxlbWVudC5iZWZvcmUocGxhY2Vob2xkZXIpOworICAgICAgICBwbGFj ZWhvbGRlci5iZWZvcmUoZWxlbWVudCk7CisgICAgICAgIHBsYWNlaG9sZGVyLnJlbW92ZSgpOwor ICAgIH0KKwogICAgIGZ1bmN0aW9uIHN0cmlwRGlhY3JpdGljcyhzdHIpIHsKLSAgICAgICAgdmFy IHJldCwgaSwgbCwgYzsKLQotICAgICAgICBpZiAoIXN0ciB8fCBzdHIubGVuZ3RoIDwgMSkgcmV0 dXJuIHN0cjsKLQotICAgICAgICByZXQgPTNEICIiOwotICAgICAgICBmb3IgKGkgPTNEIDAsIGwg PTNEIHN0ci5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAgIGMgPTNEIHN0ci5jaGFy QXQoaSk7Ci0gICAgICAgICAgICByZXQgKz0zRCBESUFDUklUSUNTW2NdIHx8IGM7CisgICAgICAg IC8vIFVzZWQgJ3VuaSByYW5nZSArIG5hbWVkIGZ1bmN0aW9uJyBmcm9tIGh0dHA6Ly9qc3BlcmYu Y29tL2RpYWNyaT0KdGljcy8xOAorICAgICAgICBmdW5jdGlvbiBtYXRjaChhKSB7CisgICAgICAg ICAgICByZXR1cm4gRElBQ1JJVElDU1thXSB8fCBhOwogICAgICAgICB9Ci0gICAgICAgIHJldHVy biByZXQ7CisKKyAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bXlx1MDAwMC1cdTAwN0VdL2cs IG1hdGNoKTsKICAgICB9Cj0yMAogICAgIGZ1bmN0aW9uIGluZGV4T2YodmFsdWUsIGFycmF5KSB7 CkBAIC0xODksMTAgKzE5Myw2IEBACiAgICAgICAgIH0pOwogICAgIH0KPTIwCi0gICAgJGRvY3Vt ZW50Lm9uKCJtb3VzZW1vdmUiLCBmdW5jdGlvbiAoZSkgewotICAgICAgICBsYXN0TW91c2VQb3Np dGlvbi54ID0zRCBlLnBhZ2VYOwotICAgICAgICBsYXN0TW91c2VQb3NpdGlvbi55ID0zRCBlLnBh Z2VZOwotICAgIH0pOwo9MjAKICAgICAvKioKICAgICAgKiBmaWx0ZXJzIG1vdXNlIGV2ZW50cyBz byBhbiBldmVudCBpcyBmaXJlZCBvbmx5IGlmIHRoZSBtb3VzZSBtb3ZlZC4KQEAgLTIzMCwyMCAr MjMwLDYgQEAKICAgICAgICAgfTsKICAgICB9Cj0yMAotICAgIC8qKgotICAgICAqIEEgc2ltcGxl IGltcGxlbWVudGF0aW9uIG9mIGEgdGh1bmsKLSAgICAgKiBAcGFyYW0gZm9ybXVsYSBmdW5jdGlv biB1c2VkIHRvIGxhemlseSBpbml0aWFsaXplIHRoZSB0aHVuawotICAgICAqIEByZXR1cm4ge0Z1 bmN0aW9ufQotICAgICAqLwotICAgIGZ1bmN0aW9uIHRodW5rKGZvcm11bGEpIHsKLSAgICAgICAg dmFyIGV2YWx1YXRlZCA9M0QgZmFsc2UsCi0gICAgICAgICAgICB2YWx1ZTsKLSAgICAgICAgcmV0 dXJuIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgaWYgKGV2YWx1YXRlZCA9M0Q9M0Q9M0QgZmFs c2UpIHsgdmFsdWUgPTNEIGZvcm11bGEoKTsgZXZhbHVhdGU9CmQgPTNEIHRydWU7IH0KLSAgICAg ICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgfTsKLSAgICB9OwotCiAgICAgZnVuY3Rpb24g aW5zdGFsbERlYm91bmNlZFNjcm9sbCh0aHJlc2hvbGQsIGVsZW1lbnQpIHsKICAgICAgICAgdmFy IG5vdGlmeSA9M0QgZGVib3VuY2UodGhyZXNob2xkLCBmdW5jdGlvbiAoZSkgeyBlbGVtZW50LnRy aWdnZXIoPQoic2Nyb2xsLWRlYm91bmNlZCIsIGUpO30pOwogICAgICAgICBlbGVtZW50Lm9uKCJz Y3JvbGwiLCBmdW5jdGlvbiAoZSkgewpAQCAtMjYzLDggKzI0OSw5IEBACiAgICAgICAgICAgICAk ZWwuZm9jdXMoKTsKPTIwCiAgICAgICAgICAgICAvKiBtYWtlIHN1cmUgZWwgcmVjZWl2ZWQgZm9j dXMgc28gd2UgZG8gbm90IGVycm9yIG91dCB3aGVuIHRyeT0KaW5nIHRvIG1hbmlwdWxhdGUgdGhl IGNhcmV0LgotICAgICAgICAgICAgICAgIHNvbWV0aW1lcyBtb2RhbHMgb3Igb3RoZXJzIGxpc3Rl bmVycyBtYXkgc3RlYWwgaXQgYWZ0ZXIgaXQ9CidzIHNldCAqLwotICAgICAgICAgICAgaWYgKCRl bC5pcygiOnZpc2libGUiKSAmJiBlbCA9M0Q9M0Q9M0QgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk9 CiB7CisgICAgICAgICAgICAgICAgc29tZXRpbWVzIG1vZGFscyBvciBvdGhlcnMgbGlzdGVuZXJz IG1heSBzdGVhbCBpdCBhZnRlciBpdD0KcyBzZXQgKi8KKyAgICAgICAgICAgIHZhciBpc1Zpc2li bGUgPTNEIChlbC5vZmZzZXRXaWR0aCA+IDAgfHwgZWwub2Zmc2V0SGVpZ2h0ID4gMCk7CisgICAg ICAgICAgICBpZiAoaXNWaXNpYmxlICYmIGVsID0zRD0zRD0zRCBkb2N1bWVudC5hY3RpdmVFbGVt ZW50KSB7Cj0yMAogICAgICAgICAgICAgICAgIC8qIGFmdGVyIHRoZSBmb2N1cyBpcyBzZXQgbW92 ZSB0aGUgY2FyZXQgdG8gdGhlIGVuZCwgbmVjZXM9CnNhcnkgd2hlbiB3ZSB2YWwoKQogICAgICAg ICAgICAgICAgICAgICBqdXN0IGJlZm9yZSBzZXR0aW5nIGZvY3VzICovCkBAIC0zMzMsMjcgKzMy MCwzNCBAQAogICAgIGZ1bmN0aW9uIHN5bmNDc3NDbGFzc2VzKGRlc3QsIHNyYywgYWRhcHRlcikg ewogICAgICAgICB2YXIgY2xhc3NlcywgcmVwbGFjZW1lbnRzID0zRCBbXSwgYWRhcHRlZDsKPTIw Ci0gICAgICAgIGNsYXNzZXMgPTNEIGRlc3QuYXR0cigiY2xhc3MiKTsKKyAgICAgICAgY2xhc3Nl cyA9M0QgJC50cmltKGRlc3QuYXR0cigiY2xhc3MiKSk7CisKICAgICAgICAgaWYgKGNsYXNzZXMp IHsKICAgICAgICAgICAgIGNsYXNzZXMgPTNEICcnICsgY2xhc3NlczsgLy8gZm9yIElFIHdoaWNo IHJldHVybnMgb2JqZWN0Ci0gICAgICAgICAgICAkKGNsYXNzZXMuc3BsaXQoIiAiKSkuZWFjaDIo ZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgICQoY2xhc3Nlcy5zcGxpdCgvXHMrLykpLmVhY2gy KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgIGlmICh0aGlzLmluZGV4T2YoInNlbGVjdDIt IikgPTNEPTNEPTNEIDApIHsKICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2go dGhpcyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KLSAg ICAgICAgY2xhc3NlcyA9M0Qgc3JjLmF0dHIoImNsYXNzIik7CisKKyAgICAgICAgY2xhc3NlcyA9 M0QgJC50cmltKHNyYy5hdHRyKCJjbGFzcyIpKTsKKwogICAgICAgICBpZiAoY2xhc3Nlcykgewog ICAgICAgICAgICAgY2xhc3NlcyA9M0QgJycgKyBjbGFzc2VzOyAvLyBmb3IgSUUgd2hpY2ggcmV0 dXJucyBvYmplY3QKLSAgICAgICAgICAgICQoY2xhc3Nlcy5zcGxpdCgiICIpKS5lYWNoMihmdW5j dGlvbigpIHsKKworICAgICAgICAgICAgJChjbGFzc2VzLnNwbGl0KC9ccysvKSkuZWFjaDIoZnVu Y3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXhPZigic2VsZWN0Mi0iKSAh PTNEPTNEIDApIHsKICAgICAgICAgICAgICAgICAgICAgYWRhcHRlZCA9M0QgYWRhcHRlcih0aGlz KTsKKwogICAgICAgICAgICAgICAgICAgICBpZiAoYWRhcHRlZCkgewotICAgICAgICAgICAgICAg ICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2godGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAg ICByZXBsYWNlbWVudHMucHVzaChhZGFwdGVkKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwogICAgICAgICB9CisKICAgICAgICAgZGVz dC5hdHRyKCJjbGFzcyIsIHJlcGxhY2VtZW50cy5qb2luKCIgIikpOwogICAgIH0KPTIwCkBAIC0z OTMsMTQgKzM4NywxNCBAQAogICAgIC8qKgogICAgICAqIFByb2R1Y2VzIGFuIGFqYXgtYmFzZWQg cXVlcnkgZnVuY3Rpb24KICAgICAgKgotICAgICAqIEBwYXJhbSBvcHRpb25zIG9iamVjdCBjb250 YWluaW5nIGNvbmZpZ3VyYXRpb24gcGFyYW10ZXJzCisgICAgICogQHBhcmFtIG9wdGlvbnMgb2Jq ZWN0IGNvbnRhaW5pbmcgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCiAgICAgICogQHBhcmFtIG9w dGlvbnMucGFyYW1zIHBhcmFtZXRlciBtYXAgZm9yIHRoZSB0cmFuc3BvcnQgYWpheCBjYWxsLCBj YT0KbiBjb250YWluIHN1Y2ggb3B0aW9ucyBhcyBjYWNoZSwganNvbnBDYWxsYmFjaywgZXRjLiBz ZWUgJC5hamF4CiAgICAgICogQHBhcmFtIG9wdGlvbnMudHJhbnNwb3J0IGZ1bmN0aW9uIHRoYXQg d2lsbCBiZSB1c2VkIHRvIGV4ZWN1dGUgdGhlID0KYWpheCByZXF1ZXN0LiBtdXN0IGJlIGNvbXBh dGlibGUgd2l0aCBwYXJhbWV0ZXJzIHN1cHBvcnRlZCBieSAkLmFqYXgKICAgICAgKiBAcGFyYW0g b3B0aW9ucy51cmwgdXJsIGZvciB0aGUgZGF0YQogICAgICAqIEBwYXJhbSBvcHRpb25zLmRhdGEg YSBmdW5jdGlvbihzZWFyY2hUZXJtLCBwYWdlTnVtYmVyLCBjb250ZXh0KSB0aGE9CnQgc2hvdWxk IHJldHVybiBhbiBvYmplY3QgY29udGFpbmluZyBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyBmb3Ig dGhlIGFib3ZlID0KdXJsLgotICAgICAqIEBwYXJhbSBvcHRpb25zLmRhdGFUeXBlIHJlcXVlc3Qg ZGF0YSB0eXBlOiBhamF4LCBqc29ucCwgb3RoZXIgZGF0YXQ9CmF0eXBlcyBzdXBwb3J0ZWQgYnkg alF1ZXJ5J3MgJC5hamF4IGZ1bmN0aW9uIG9yIHRoZSB0cmFuc3BvcnQgZnVuY3Rpb24gaWYgcz0K cGVjaWZpZWQKKyAgICAgKiBAcGFyYW0gb3B0aW9ucy5kYXRhVHlwZSByZXF1ZXN0IGRhdGEgdHlw ZTogYWpheCwganNvbnAsIG90aGVyIGRhdGF0PQp5cGVzIHN1cHBvcnRlZCBieSBqUXVlcnkncyAk LmFqYXggZnVuY3Rpb24gb3IgdGhlIHRyYW5zcG9ydCBmdW5jdGlvbiBpZiBzcGU9CmNpZmllZAog ICAgICAqIEBwYXJhbSBvcHRpb25zLnF1aWV0TWlsbGlzIChvcHRpb25hbCkgbWlsbGlzZWNvbmRz IHRvIHdhaXQgYmVmb3JlIG09CmFraW5nIHRoZSBhamF4UmVxdWVzdCwgaGVscHMgZGVib3VuY2Ug dGhlIGFqYXggZnVuY3Rpb24gaWYgaW52b2tlZCB0b28gb2Z0ZW4KLSAgICAgKiBAcGFyYW0gb3B0 aW9ucy5yZXN1bHRzIGEgZnVuY3Rpb24ocmVtb3RlRGF0YSwgcGFnZU51bWJlcikgdGhhdCBjb252 PQplcnRzIGRhdGEgcmV0dXJuZWQgZm9ybSB0aGUgcmVtb3RlIHJlcXVlc3QgdG8gdGhlIGZvcm1h dCBleHBlY3RlZCBieSBTZWxlY3Q9CjIuCisgICAgICogQHBhcmFtIG9wdGlvbnMucmVzdWx0cyBh IGZ1bmN0aW9uKHJlbW90ZURhdGEsIHBhZ2VOdW1iZXIsIHF1ZXJ5KSB0aD0KYXQgY29udmVydHMg ZGF0YSByZXR1cm5lZCBmb3JtIHRoZSByZW1vdGUgcmVxdWVzdCB0byB0aGUgZm9ybWF0IGV4cGVj dGVkIGJ5PQogU2VsZWN0Mi4KICAgICAgKiAgICAgIFRoZSBleHBlY3RlZCBmb3JtYXQgaXMgYW4g b2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBrZXlzOgogICAgICAqICAgICAgcmVzdWx0 cyBhcnJheSBvZiBvYmplY3RzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGNob2ljZXMKICAgICAgKiAg ICAgIG1vcmUgKG9wdGlvbmFsKSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGVyZSBhcmUg bW9yZSByZXN1PQpsdHMgYXZhaWxhYmxlCkBAIC00MzEsNyArNDI1LDcgQEAKICAgICAgICAgICAg ICAgICBkYXRhID0zRCBkYXRhID8gZGF0YS5jYWxsKHNlbGYsIHF1ZXJ5LnRlcm0sIHF1ZXJ5LnBh Z2UsIHF1PQplcnkuY29udGV4dCkgOiBudWxsOwogICAgICAgICAgICAgICAgIHVybCA9M0QgKHR5 cGVvZiB1cmwgPTNEPTNEPTNEICdmdW5jdGlvbicpID8gdXJsLmNhbGwoc2VsZiw9CiBxdWVyeS50 ZXJtLCBxdWVyeS5wYWdlLCBxdWVyeS5jb250ZXh0KSA6IHVybDsKPTIwCi0gICAgICAgICAgICAg ICAgaWYgKGhhbmRsZXIpIHsgaGFuZGxlci5hYm9ydCgpOyB9CisgICAgICAgICAgICAgICAgaWYg KGhhbmRsZXIgJiYgdHlwZW9mIGhhbmRsZXIuYWJvcnQgPTNEPTNEPTNEICJmdW5jdGlvbiIpID0K eyBoYW5kbGVyLmFib3J0KCk7IH0KPTIwCiAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucGFy YW1zKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkLmlzRnVuY3Rpb24ob3B0aW9ucy5wYXJh bXMpKSB7CkBAIC00NDcsNyArNDQxLDE4IEBACiAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRh dGEsCiAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIC0gcmVwbGFjZSBxdWVyeS5wYWdlIHdpdGggcXVl cnkgc28gdXNlcnMgaD0KYXZlIGFjY2VzcyB0byB0ZXJtLCBwYWdlLCBldGMuCi0gICAgICAgICAg ICAgICAgICAgICAgICB2YXIgcmVzdWx0cyA9M0Qgb3B0aW9ucy5yZXN1bHRzKGRhdGEsIHF1ZXJ5 LnBhZ2UpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkZWQgcXVlcnkgYXMgdGhpcmQg cGFyYW10ZXIgdG8ga2VlcCBiYWNrd2FyZHM9CiBjb21wYXRpYmlsaXR5CisgICAgICAgICAgICAg ICAgICAgICAgICB2YXIgcmVzdWx0cyA9M0Qgb3B0aW9ucy5yZXN1bHRzKGRhdGEsIHF1ZXJ5LnBh Z2UsID0KcXVlcnkpOworICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkuY2FsbGJhY2socmVz dWx0cyk7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIGVycm9y OiBmdW5jdGlvbihqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24peworICAgICAgICAgICAg ICAgICAgICAgICAgdmFyIHJlc3VsdHMgPTNEIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBoYXNFcnJvcjogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcVhIUjoganFY SFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFN0YXR1czogdGV4dFN0YXR1cywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvclRocm93bjogZXJyb3JUaHJvd24sCisg ICAgICAgICAgICAgICAgICAgICAgICB9OworCiAgICAgICAgICAgICAgICAgICAgICAgICBxdWVy eS5jYWxsYmFjayhyZXN1bHRzKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgIH0pOwpAQCAtNDY0LDcgKzQ2OSw3IEBACiAgICAgICoKICAgICAgKiBJZiB0aGUgYXJyYXkg Zm9ybSBpcyB1c2VkIGl0IGlzIGFzc3VtZWQgdGhhdCBpdCBjb250YWlucyBvYmplY3RzIHdpPQp0 aCAnaWQnIGFuZCAndGV4dCcga2V5cy4KICAgICAgKgotICAgICAqIElmIHRoZSBvYmplY3QgZm9y bSBpcyB1c2VkIHRpIGlzIGFzc3VtZWQgdGhhdCBpdCBjb250YWlucyAnZGF0YScgYW49CmQgJ3Rl eHQnIGtleXMuIFRoZSAnZGF0YScga2V5IHNob3VsZCBjb250YWluCisgICAgICogSWYgdGhlIG9i amVjdCBmb3JtIGlzIHVzZWQgaXQgaXMgYXNzdW1lZCB0aGF0IGl0IGNvbnRhaW5zICdkYXRhJyBh bj0KZCAndGV4dCcga2V5cy4gVGhlICdkYXRhJyBrZXkgc2hvdWxkIGNvbnRhaW4KICAgICAgKiBh biBhcnJheSBvZiBvYmplY3RzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGNob2ljZXMuIFRoZXNlIG9i amVjdHMgbXVzPQp0IGNvbnRhaW4gYXQgbGVhc3QgYW4gJ2lkJyBrZXkuIFRoZSAndGV4dCcKICAg ICAgKiBrZXkgY2FuIGVpdGhlciBiZSBhIFN0cmluZyBpbiB3aGljaCBjYXNlIGl0IGlzIGV4cGVj dGVkIHRoYXQgZWFjaCBlPQpsZW1lbnQgaW4gdGhlICdkYXRhJyBhcnJheSBoYXMgYSBrZXkgd2l0 aCB0aGUKICAgICAgKiB2YWx1ZSBvZiAndGV4dCcgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIG1hdGNo IGNob2ljZXMuIEFsdGVybmF0aXZlbHksPQogdGV4dCBjYW4gYmUgYSBmdW5jdGlvbihpdGVtKSB0 aGF0IGNhbiBleHRyYWN0CkBAIC01MzMsMTQgKzUzOCwxNyBAQAogICAgICAgICB2YXIgaXNGdW5j ID0zRCAkLmlzRnVuY3Rpb24oZGF0YSk7CiAgICAgICAgIHJldHVybiBmdW5jdGlvbiAocXVlcnkp IHsKICAgICAgICAgICAgIHZhciB0ID0zRCBxdWVyeS50ZXJtLCBmaWx0ZXJlZCA9M0Qge3Jlc3Vs dHM6IFtdfTsKLSAgICAgICAgICAgICQoaXNGdW5jID8gZGF0YSgpIDogZGF0YSkuZWFjaChmdW5j dGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGlzT2JqZWN0ID0zRCB0aGlzLnRleHQgIT0z RD0zRCB1bmRlZmluZWQsCi0gICAgICAgICAgICAgICAgICAgIHRleHQgPTNEIGlzT2JqZWN0ID8g dGhpcy50ZXh0IDogdGhpczsKLSAgICAgICAgICAgICAgICBpZiAodCA9M0Q9M0Q9M0QgIiIgfHwg cXVlcnkubWF0Y2hlcih0LCB0ZXh0KSkgewotICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZC5y ZXN1bHRzLnB1c2goaXNPYmplY3QgPyB0aGlzIDoge2lkOiB0aGlzLCB0ZXg9CnQ6IHRoaXN9KTsK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHF1ZXJ5LmNh bGxiYWNrKGZpbHRlcmVkKTsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPTNEIGlzRnVuYyA/IGRh dGEocXVlcnkpIDogZGF0YTsKKyAgICAgICAgICAgIGlmICgkLmlzQXJyYXkocmVzdWx0KSkgewor ICAgICAgICAgICAgICAgICQocmVzdWx0KS5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg ICAgICAgICAgdmFyIGlzT2JqZWN0ID0zRCB0aGlzLnRleHQgIT0zRD0zRCB1bmRlZmluZWQsCisg ICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0zRCBpc09iamVjdCA/IHRoaXMudGV4dCA6IHRo aXM7CisgICAgICAgICAgICAgICAgICAgIGlmICh0ID0zRD0zRD0zRCAiIiB8fCBxdWVyeS5tYXRj aGVyKHQsIHRleHQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZC5yZXN1bHRz LnB1c2goaXNPYmplY3QgPyB0aGlzIDoge2lkOiB0aGlzLD0KIHRleHQ6IHRoaXN9KTsKKyAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHF1 ZXJ5LmNhbGxiYWNrKGZpbHRlcmVkKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfTsKICAgICB9 Cj0yMApAQCAtNTU1LDExICs1NjMsMjQgQEAKICAgICBmdW5jdGlvbiBjaGVja0Zvcm1hdHRlcihm b3JtYXR0ZXIsIGZvcm1hdHRlck5hbWUpIHsKICAgICAgICAgaWYgKCQuaXNGdW5jdGlvbihmb3Jt YXR0ZXIpKSByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKCFmb3JtYXR0ZXIpIHJldHVybiBmYWxz ZTsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKGZvcm1hdHRlck5hbWUgKyIgbXVzdCBiZSBhIGZ1 bmN0aW9uIG9yIGEgZmFsc3kgdmFsPQp1ZSIpOworICAgICAgICBpZiAodHlwZW9mKGZvcm1hdHRl cikgPTNEPTNEPTNEICdzdHJpbmcnKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgdGhyb3cgbmV3IEVy cm9yKGZvcm1hdHRlck5hbWUgKyIgbXVzdCBiZSBhIHN0cmluZywgZnVuY3Rpb24sIG9yIGZhPQps c3kgdmFsdWUiKTsKICAgICB9Cj0yMAotICAgIGZ1bmN0aW9uIGV2YWx1YXRlKHZhbCkgewotICAg ICAgICByZXR1cm4gJC5pc0Z1bmN0aW9uKHZhbCkgPyB2YWwoKSA6IHZhbDsKKyAgLyoqCisgICAq IFJldHVybnMgYSBnaXZlbiB2YWx1ZQorICAgKiBJZiBnaXZlbiBhIGZ1bmN0aW9uLCByZXR1cm5z IGl0cyBvdXRwdXQKKyAgICoKKyAgICogQHBhcmFtIHZhbCBzdHJpbmd8ZnVuY3Rpb24KKyAgICog QHBhcmFtIGNvbnRleHQgdmFsdWUgb2YgInRoaXMiIHRvIGJlIHBhc3NlZCB0byBmdW5jdGlvbgor ICAgKiBAcmV0dXJucyB7Kn0KKyAgICovCisgICAgZnVuY3Rpb24gZXZhbHVhdGUodmFsLCBjb250 ZXh0KSB7CisgICAgICAgIGlmICgkLmlzRnVuY3Rpb24odmFsKSkgeworICAgICAgICAgICAgdmFy IGFyZ3MgPTNEIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7CisgICAg ICAgICAgICByZXR1cm4gdmFsLmFwcGx5KGNvbnRleHQsIGFyZ3MpOworICAgICAgICB9CisgICAg ICAgIHJldHVybiB2YWw7CiAgICAgfQo9MjAKICAgICBmdW5jdGlvbiBjb3VudFJlc3VsdHMocmVz dWx0cykgewpAQCAtNjI3LDYgKzY0OCwxNSBAQAogICAgICAgICBpZiAob3JpZ2luYWwhPTNEPTNE aW5wdXQpIHJldHVybiBpbnB1dDsKICAgICB9Cj0yMAorICAgIGZ1bmN0aW9uIGNsZWFudXBKUXVl cnlFbGVtZW50cygpIHsKKyAgICAgICAgdmFyIHNlbGYgPTNEIHRoaXM7CisKKyAgICAgICAgJC5l YWNoKGFyZ3VtZW50cywgZnVuY3Rpb24gKGksIGVsZW1lbnQpIHsKKyAgICAgICAgICAgIHNlbGZb ZWxlbWVudF0ucmVtb3ZlKCk7CisgICAgICAgICAgICBzZWxmW2VsZW1lbnRdID0zRCBudWxsOwor ICAgICAgICB9KTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgbmV3IGNsYXNz CiAgICAgICoKQEAgLTY1NCw3ICs2ODQsNyBAQAo9MjAKICAgICAgICAgLy8gYWJzdHJhY3QKICAg ICAgICAgaW5pdDogZnVuY3Rpb24gKG9wdHMpIHsKLSAgICAgICAgICAgIHZhciByZXN1bHRzLCBz ZWFyY2gsIHJlc3VsdHNTZWxlY3RvciA9M0QgIi5zZWxlY3QyLXJlc3VsdHMiLCBkPQppc2FibGVk LCByZWFkb25seTsKKyAgICAgICAgICAgIHZhciByZXN1bHRzLCBzZWFyY2gsIHJlc3VsdHNTZWxl Y3RvciA9M0QgIi5zZWxlY3QyLXJlc3VsdHMiOwo9MjAKICAgICAgICAgICAgIC8vIHByZXBhcmUg b3B0aW9ucwogICAgICAgICAgICAgdGhpcy5vcHRzID0zRCBvcHRzID0zRCB0aGlzLnByZXBhcmVP cHRzKG9wdHMpOwpAQCAtNjY5LDE4ICs2OTksMjggQEAKPTIwCiAgICAgICAgICAgICB0aGlzLmNv bnRhaW5lciA9M0QgdGhpcy5jcmVhdGVDb250YWluZXIoKTsKPTIwCisgICAgICAgICAgICB0aGlz LmxpdmVSZWdpb24gPTNEICQoIjxzcGFuPiIsIHsKKyAgICAgICAgICAgICAgICAgICAgcm9sZTog InN0YXR1cyIsCisgICAgICAgICAgICAgICAgICAgICJhcmlhLWxpdmUiOiAicG9saXRlIgorICAg ICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLmFkZENsYXNzKCJzZWxlY3QyLWhpZGRl bi1hY2Nlc3NpYmxlIikKKyAgICAgICAgICAgICAgICAuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSk7 CisKICAgICAgICAgICAgIHRoaXMuY29udGFpbmVySWQ9M0QiczJpZF8iKyhvcHRzLmVsZW1lbnQu YXR0cigiaWQiKSB8fCAiYXV0b2dlPQpuIituZXh0VWlkKCkpOwotICAgICAgICAgICAgdGhpcy5j b250YWluZXJTZWxlY3Rvcj0zRCIjIit0aGlzLmNvbnRhaW5lcklkLnJlcGxhY2UoLyhbOyYsXC49 ClwrXCpcfic6IlwhXF4jJCVAXFtcXVwoXCk9M0Q+XHxdKS9nLCAnXFwkMScpOworICAgICAgICAg ICAgdGhpcy5jb250YWluZXJFdmVudE5hbWU9M0QgdGhpcy5jb250YWluZXJJZAorICAgICAgICAg ICAgICAgIC5yZXBsYWNlKC8oWy5dKS9nLCAnXycpCisgICAgICAgICAgICAgICAgLnJlcGxhY2Uo LyhbOyYsXC1cLlwrXCpcfic6IlwhXF4jJCVAXFtcXVwoXCk9M0Q+XHxdKS9nLCAnXD0KXCQxJyk7 CiAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hdHRyKCJpZCIsIHRoaXMuY29udGFpbmVySWQp Owo9MjAKLSAgICAgICAgICAgIC8vIGNhY2hlIHRoZSBib2R5IHNvIGZ1dHVyZSBsb29rdXBzIGFy ZSBjaGVhcAotICAgICAgICAgICAgdGhpcy5ib2R5ID0zRCB0aHVuayhmdW5jdGlvbigpIHsgcmV0 dXJuIG9wdHMuZWxlbWVudC5jbG9zZXN0KCI9CmJvZHkiKTsgfSk7CisgICAgICAgICAgICB0aGlz LmNvbnRhaW5lci5hdHRyKCJ0aXRsZSIsIG9wdHMuZWxlbWVudC5hdHRyKCJ0aXRsZSIpKTsKKwor ICAgICAgICAgICAgdGhpcy5ib2R5ID0zRCAkKCJib2R5Iik7Cj0yMAogICAgICAgICAgICAgc3lu Y0Nzc0NsYXNzZXModGhpcy5jb250YWluZXIsIHRoaXMub3B0cy5lbGVtZW50LCB0aGlzLm9wdHMu YWQ9CmFwdENvbnRhaW5lckNzc0NsYXNzKTsKPTIwCiAgICAgICAgICAgICB0aGlzLmNvbnRhaW5l ci5hdHRyKCJzdHlsZSIsIG9wdHMuZWxlbWVudC5hdHRyKCJzdHlsZSIpKTsKLSAgICAgICAgICAg IHRoaXMuY29udGFpbmVyLmNzcyhldmFsdWF0ZShvcHRzLmNvbnRhaW5lckNzcykpOwotICAgICAg ICAgICAgdGhpcy5jb250YWluZXIuYWRkQ2xhc3MoZXZhbHVhdGUob3B0cy5jb250YWluZXJDc3ND bGFzcykpOworICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY3NzKGV2YWx1YXRlKG9wdHMuY29u dGFpbmVyQ3NzLCB0aGlzLm9wdHMuZWxlbWU9Cm50KSk7CisgICAgICAgICAgICB0aGlzLmNvbnRh aW5lci5hZGRDbGFzcyhldmFsdWF0ZShvcHRzLmNvbnRhaW5lckNzc0NsYXNzLCB0aGlzLj0Kb3B0 cy5lbGVtZW50KSk7Cj0yMAogICAgICAgICAgICAgdGhpcy5lbGVtZW50VGFiSW5kZXggPTNEIHRo aXMub3B0cy5lbGVtZW50LmF0dHIoInRhYmluZGV4Iik7Cj0yMApAQCAtNjk3LDcgKzczNyw3IEBA Cj0yMAogICAgICAgICAgICAgc3luY0Nzc0NsYXNzZXModGhpcy5kcm9wZG93biwgdGhpcy5vcHRz LmVsZW1lbnQsIHRoaXMub3B0cy5hZGE9CnB0RHJvcGRvd25Dc3NDbGFzcyk7Cj0yMAotICAgICAg ICAgICAgdGhpcy5kcm9wZG93bi5hZGRDbGFzcyhldmFsdWF0ZShvcHRzLmRyb3Bkb3duQ3NzQ2xh c3MpKTsKKyAgICAgICAgICAgIHRoaXMuZHJvcGRvd24uYWRkQ2xhc3MoZXZhbHVhdGUob3B0cy5k cm9wZG93bkNzc0NsYXNzLCB0aGlzLm9wPQp0cy5lbGVtZW50KSk7CiAgICAgICAgICAgICB0aGlz LmRyb3Bkb3duLmRhdGEoInNlbGVjdDIiLCB0aGlzKTsKICAgICAgICAgICAgIHRoaXMuZHJvcGRv d24ub24oImNsaWNrIiwga2lsbEV2ZW50KTsKPTIwCkBAIC03MTQsNyArNzU0LDIzIEBACiAgICAg ICAgICAgICB0aGlzLmNvbnRhaW5lci5vbigiY2xpY2siLCBraWxsRXZlbnQpOwo9MjAKICAgICAg ICAgICAgIGluc3RhbGxGaWx0ZXJlZE1vdXNlTW92ZSh0aGlzLnJlc3VsdHMpOwotICAgICAgICAg ICAgdGhpcy5kcm9wZG93bi5vbigibW91c2Vtb3ZlLWZpbHRlcmVkIHRvdWNoc3RhcnQgdG91Y2ht b3ZlIHRvdWM9CmhlbmQiLCByZXN1bHRzU2VsZWN0b3IsIHRoaXMuYmluZCh0aGlzLmhpZ2hsaWdo dFVuZGVyRXZlbnQpKTsKKworICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5vbigibW91c2Vtb3Zl LWZpbHRlcmVkIiwgcmVzdWx0c1NlbGVjdG9yLCB0aGlzLmI9CmluZCh0aGlzLmhpZ2hsaWdodFVu ZGVyRXZlbnQpKTsKKyAgICAgICAgICAgIHRoaXMuZHJvcGRvd24ub24oInRvdWNoc3RhcnQgdG91 Y2htb3ZlIHRvdWNoZW5kIiwgcmVzdWx0c1NlbGVjPQp0b3IsIHRoaXMuYmluZChmdW5jdGlvbiAo ZXZlbnQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl90b3VjaEV2ZW50ID0zRCB0cnVlOworICAg ICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0VW5kZXJFdmVudChldmVudCk7CisgICAgICAgICAg ICB9KSk7CisgICAgICAgICAgICB0aGlzLmRyb3Bkb3duLm9uKCJ0b3VjaG1vdmUiLCByZXN1bHRz U2VsZWN0b3IsIHRoaXMuYmluZCh0aGlzLj0KdG91Y2hNb3ZlZCkpOworICAgICAgICAgICAgdGhp cy5kcm9wZG93bi5vbigidG91Y2hzdGFydCB0b3VjaGVuZCIsIHJlc3VsdHNTZWxlY3RvciwgdGhp cy49CmJpbmQodGhpcy5jbGVhclRvdWNoTW92ZWQpKTsKKworICAgICAgICAgICAgLy8gV2FpdGlu ZyBmb3IgYSBjbGljayBldmVudCBvbiB0b3VjaCBkZXZpY2VzIHRvIHNlbGVjdCBvcHRpb249CiBh bmQgaGlkZSBkcm9wZG93bgorICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGNsaWNrIHdpbGwgYmUg dHJpZ2dlcmVkIG9uIGFuIHVuZGVybHlpbmcgZWxlbWVudAorICAgICAgICAgICAgdGhpcy5kcm9w ZG93bi5vbignY2xpY2snLCB0aGlzLmJpbmQoZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAg ICAgICAgaWYgKHRoaXMuX3RvdWNoRXZlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5f dG91Y2hFdmVudCA9M0QgZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SGln aGxpZ2h0ZWQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KSk7Cj0yMAogICAg ICAgICAgICAgaW5zdGFsbERlYm91bmNlZFNjcm9sbCg4MCwgdGhpcy5yZXN1bHRzKTsKICAgICAg ICAgICAgIHRoaXMuZHJvcGRvd24ub24oInNjcm9sbC1kZWJvdW5jZWQiLCByZXN1bHRzU2VsZWN0 b3IsIHRoaXMuYmluPQpkKHRoaXMubG9hZE1vcmVJZk5lZWRlZCkpOwpAQCAtNzI2LDcgKzc4Miw3 IEBACiAgICAgICAgICAgICAvLyBpZiBqcXVlcnkubW91c2V3aGVlbCBwbHVnaW4gaXMgaW5zdGFs bGVkIHdlIGNhbiBwcmV2ZW50IG91dD0KLW9mLWJvdW5kcyBzY3JvbGxpbmcgb2YgcmVzdWx0cyB2 aWEgbW91c2V3aGVlbAogICAgICAgICAgICAgaWYgKCQuZm4ubW91c2V3aGVlbCkgewogICAgICAg ICAgICAgICAgIHJlc3VsdHMubW91c2V3aGVlbChmdW5jdGlvbiAoZSwgZGVsdGEsIGRlbHRhWCwg ZGVsdGFZKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciB0b3AgPTNEIHJlc3VsdHMuc2Nyb2xs VG9wKCksIGhlaWdodDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHRvcCA9M0QgcmVzdWx0cy5z Y3JvbGxUb3AoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGRlbHRhWSA+IDAgJiYgdG9wIC0g ZGVsdGFZIDw9M0QgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5zY3JvbGxU b3AoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBraWxsRXZlbnQoZSk7CkBAIC03NTIsNyAr ODA4LDEwIEBACiAgICAgICAgICAgICAvLyB0cmFwIGFsbCBtb3VzZSBldmVudHMgZnJvbSBsZWF2 aW5nIHRoZSBkcm9wZG93bi4gc29tZXRpbWVzID0KdGhlcmUgbWF5IGJlIGEgbW9kYWwgdGhhdCBp cyBsaXN0ZW5pbmcKICAgICAgICAgICAgIC8vIGZvciBtb3VzZSBldmVudHMgb3V0c2lkZSBvZiBp dHNlbGYgc28gaXQgY2FuIGNsb3NlIGl0c2VsZi4gPQpzaW5jZSB0aGUgZHJvcGRvd24gaXMgbm93 IG91dHNpZGUgdGhlIHNlbGVjdDIncwogICAgICAgICAgICAgLy8gZG9tIGl0IHdpbGwgdHJpZ2dl ciB0aGUgcG9wdXAgY2xvc2UsIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHc9CmFudAotICAgICAgICAg ICAgdGhpcy5kcm9wZG93bi5vbigiY2xpY2sgbW91c2V1cCBtb3VzZWRvd24iLCBmdW5jdGlvbiAo ZSkgeyBlLnM9CnRvcFByb3BhZ2F0aW9uKCk7IH0pOworICAgICAgICAgICAgLy8gZm9jdXNpbiBj YW4gY2F1c2UgZm9jdXMgd2FycyBiZXR3ZWVuIG1vZGFscyBhbmQgc2VsZWN0MiBzaW49CmNlIHRo ZSBkcm9wZG93biBpcyBvdXRzaWRlIHRoZSBtb2RhbC4KKyAgICAgICAgICAgIHRoaXMuZHJvcGRv d24ub24oImNsaWNrIG1vdXNldXAgbW91c2Vkb3duIHRvdWNoc3RhcnQgdG91Y2hlbmQgPQpmb2N1 c2luIiwgZnVuY3Rpb24gKGUpIHsgZS5zdG9wUHJvcGFnYXRpb24oKTsgfSk7CisKKyAgICAgICAg ICAgIHRoaXMubmV4dFNlYXJjaFRlcm0gPTNEIHVuZGVmaW5lZDsKPTIwCiAgICAgICAgICAgICBp ZiAoJC5pc0Z1bmN0aW9uKHRoaXMub3B0cy5pbml0U2VsZWN0aW9uKSkgewogICAgICAgICAgICAg ICAgIC8vIGluaXRpYWxpemUgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZhbHVlIG9m IHRoZSA9CnNvdXJjZSBlbGVtZW50CkBAIC03ODIsMTkgKzg0MSwyOSBAQAogICAgICAgICAgICAg b3B0cy5lbGVtZW50LnByb3AoImF1dG9mb2N1cyIsIGZhbHNlKTsKICAgICAgICAgICAgIGlmICh0 aGlzLmF1dG9mb2N1cykgdGhpcy5mb2N1cygpOwo9MjAKLSAgICAgICAgICAgIHRoaXMubmV4dFNl YXJjaFRlcm0gPTNEIHVuZGVmaW5lZDsKKyAgICAgICAgICAgIHRoaXMuc2VhcmNoLmF0dHIoInBs YWNlaG9sZGVyIiwgb3B0cy5zZWFyY2hJbnB1dFBsYWNlaG9sZGVyKTsKICAgICAgICAgfSwKPTIw CiAgICAgICAgIC8vIGFic3RyYWN0CiAgICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHsKLSAg ICAgICAgICAgIHZhciBlbGVtZW50PTNEdGhpcy5vcHRzLmVsZW1lbnQsIHNlbGVjdDIgPTNEIGVs ZW1lbnQuZGF0YSgic2VsPQplY3QyIik7CisgICAgICAgICAgICB2YXIgZWxlbWVudD0zRHRoaXMu b3B0cy5lbGVtZW50LCBzZWxlY3QyID0zRCBlbGVtZW50LmRhdGEoInNlbD0KZWN0MiIpLCBzZWxm ID0zRCB0aGlzOwo9MjAKICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTsKPTIwCi0gICAgICAgICAg ICBpZiAodGhpcy5wcm9wZXJ0eU9ic2VydmVyKSB7IGRlbGV0ZSB0aGlzLnByb3BlcnR5T2JzZXJ2 ZXI7IHRoaT0Kcy5wcm9wZXJ0eU9ic2VydmVyID0zRCBudWxsOyB9CisgICAgICAgICAgICBpZiAo ZWxlbWVudC5sZW5ndGggJiYgZWxlbWVudFswXS5kZXRhY2hFdmVudCkgeworICAgICAgICAgICAg ICAgIGVsZW1lbnQuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu ZGV0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLCBzZWxmLl9zeW5jKTsKKyAgICAgICAgICAg ICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnR5T2Jz ZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnByb3BlcnR5T2JzZXJ2ZXIuZGlzY29ubmVj dCgpOworICAgICAgICAgICAgICAgIHRoaXMucHJvcGVydHlPYnNlcnZlciA9M0QgbnVsbDsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3N5bmMgPTNEIG51bGw7Cj0yMAogICAgICAg ICAgICAgaWYgKHNlbGVjdDIgIT0zRD0zRCB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICBz ZWxlY3QyLmNvbnRhaW5lci5yZW1vdmUoKTsKKyAgICAgICAgICAgICAgICBzZWxlY3QyLmxpdmVS ZWdpb24ucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgc2VsZWN0Mi5kcm9wZG93bi5yZW1vdmUo KTsKICAgICAgICAgICAgICAgICBlbGVtZW50CiAgICAgICAgICAgICAgICAgICAgIC5yZW1vdmVD bGFzcygic2VsZWN0Mi1vZmZzY3JlZW4iKQpAQCAtODA4LDYgKzg3NywxNCBAQAogICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgICBlbGVtZW50LnNob3coKTsKICAgICAgICAgICAgIH0K KworICAgICAgICAgICAgY2xlYW51cEpRdWVyeUVsZW1lbnRzLmNhbGwodGhpcywKKyAgICAgICAg ICAgICAgICAiY29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAibGl2ZVJlZ2lvbiIsCisgICAg ICAgICAgICAgICAgImRyb3Bkb3duIiwKKyAgICAgICAgICAgICAgICAicmVzdWx0cyIsCisgICAg ICAgICAgICAgICAgInNlYXJjaCIKKyAgICAgICAgICAgICk7CiAgICAgICAgIH0sCj0yMAogICAg ICAgICAvLyBhYnN0cmFjdApAQCAtODUyLDcgKzkyOSw3IEBACj0yMAogICAgICAgICAgICAgb3B0 cyA9M0QgJC5leHRlbmQoe30sIHsKICAgICAgICAgICAgICAgICBwb3B1bGF0ZVJlc3VsdHM6IGZ1 bmN0aW9uKGNvbnRhaW5lciwgcmVzdWx0cywgcXVlcnkpIHsKLSAgICAgICAgICAgICAgICAgICAg dmFyIHBvcHVsYXRlLCAgZGF0YSwgcmVzdWx0LCBjaGlsZHJlbiwgaWQ9M0R0aGlzLm9wdHMuPQpp ZDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHBvcHVsYXRlLCBpZD0zRHRoaXMub3B0cy5pZCwg bGl2ZVJlZ2lvbj0zRHRoaXMubGl2PQplUmVnaW9uOwo9MjAKICAgICAgICAgICAgICAgICAgICAg cG9wdWxhdGU9M0RmdW5jdGlvbihyZXN1bHRzLCBjb250YWluZXIsIGRlcHRoKSB7Cj0yMApAQCAt ODYwLDYgKzkzNyw4IEBACj0yMAogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9M0Qg b3B0cy5zb3J0UmVzdWx0cyhyZXN1bHRzLCBjb250YWluZXIsIHE9CnVlcnkpOwo9MjAKKyAgICAg ICAgICAgICAgICAgICAgICAgIC8vIGNvbGxlY3QgdGhlIGNyZWF0ZWQgbm9kZXMgZm9yIGJ1bGsg YXBwZW5kCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZXMgPTNEIFtdOwogICAgICAg ICAgICAgICAgICAgICAgICAgZm9yIChpID0zRCAwLCBsID0zRCByZXN1bHRzLmxlbmd0aDsgaSA8 IGw7IGkgPTNEIGk9CiArIDEpIHsKPTIwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz dWx0PTNEcmVzdWx0c1tpXTsKQEAgLTg3NiwxNiArOTU1LDE5IEBACiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKGRpc2FibGVkKSB7IG5vZGUuYWRkQ2xhc3MoInNlbGVjdDItZGlzYWJs ZT0KZCIpOyB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvdW5kKSB7IG5v ZGUuYWRkQ2xhc3MoInNlbGVjdDItcmVzdWx0LT0Kd2l0aC1jaGlsZHJlbiIpOyB9CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbm9kZS5hZGRDbGFzcyhzZWxmLm9wdHMuZm9ybWF0UmVzdWx0 Q3NzQ2xhc3Mocj0KZXN1bHQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmF0 dHIoInJvbGUiLCAicHJlc2VudGF0aW9uIik7Cj0yMAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxhYmVsPTNEJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbGFiZWwuYWRkQ2xhc3MoInNlbGVjdDItcmVzdWx0LWxhYmVsIik7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwuYXR0cigiaWQiLCAic2VsZWN0Mi1y ZXN1bHQtbGFiZWwtIiArIG5leD0KdFVpZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsYWJlbC5hdHRyKCJyb2xlIiwgIm9wdGlvbiIpOwo9MjAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmb3JtYXR0ZWQ9M0RvcHRzLmZvcm1hdFJlc3VsdChyZXN1bHQsIGxhYmVsLCBxPQp1 ZXJ5LCBzZWxmLm9wdHMuZXNjYXBlTWFya3VwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoZm9ybWF0dGVkIT0zRD0zRHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsYWJlbC5odG1sKGZvcm1hdHRlZCk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG5vZGUuYXBwZW5kKGxhYmVsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB9Cj0yMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuYXBwZW5kKGxhYmVsKTsK PTIwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvdW5kKSB7Cj0yMApAQCAt ODk2LDggKzk3OCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KPTIwCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5kYXRhKCJzZWxlY3QyLWRhdGEiLCByZXN1bHQp OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQobm9kZSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMucHVzaChub2RlWzBdKTsKICAgICAgICAg ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnVsayBhcHBl bmQgdGhlIGNyZWF0ZWQgbm9kZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5h cHBlbmQobm9kZXMpOworICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZVJlZ2lvbi50ZXh0KG9w dHMuZm9ybWF0TWF0Y2hlcyhyZXN1bHRzLmxlbmd0aCk9Cik7CiAgICAgICAgICAgICAgICAgICAg IH07Cj0yMAogICAgICAgICAgICAgICAgICAgICBwb3B1bGF0ZShyZXN1bHRzLCBjb250YWluZXIs IDApOwpAQCAtOTUxLDkgKzEwMzcsOCBAQAo9MjAKICAgICAgICAgICAgICAgICAgICAgcXVlcnku Y2FsbGJhY2soZGF0YSk7CiAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgLy8g dGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBpbnNpZGUgdmFsKCkgd2UgY29uc3RydWN0IGNob2ljZT0K cyBmcm9tIG9wdGlvbnMgYW5kIHRoZXJlIGlkIGlzIGhhcmRjb2RlZAorICAgICAgICAgICAgICAg IC8vIHRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgaW5zaWRlIHZhbCgpIHdlIGNvbnN0cnVjdCBjaG9p Y2U9CnMgZnJvbSBvcHRpb25zIGFuZCB0aGVpciBpZCBpcyBoYXJkY29kZWQKICAgICAgICAgICAg ICAgICBvcHRzLmlkPTNEZnVuY3Rpb24oZSkgeyByZXR1cm4gZS5pZDsgfTsKLSAgICAgICAgICAg ICAgICBvcHRzLmZvcm1hdFJlc3VsdENzc0NsYXNzID0zRCBmdW5jdGlvbihkYXRhKSB7IHJldHVy biBkYXRhPQouY3NzOyB9OwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBp ZiAoISgicXVlcnkiIGluIG9wdHMpKSB7Cj0yMApAQCAtOTkxLDYgKzEwNzYsMTYgQEAKICAgICAg ICAgICAgICAgICB0aHJvdyAicXVlcnkgZnVuY3Rpb24gbm90IGRlZmluZWQgZm9yIFNlbGVjdDIg IiArIG9wdHMuZWxlPQptZW50LmF0dHIoImlkIik7CiAgICAgICAgICAgICB9Cj0yMAorICAgICAg ICAgICAgaWYgKG9wdHMuY3JlYXRlU2VhcmNoQ2hvaWNlUG9zaXRpb24gPTNEPTNEPTNEICd0b3An KSB7CisgICAgICAgICAgICAgICAgb3B0cy5jcmVhdGVTZWFyY2hDaG9pY2VQb3NpdGlvbiA9M0Qg ZnVuY3Rpb24obGlzdCwgaXRlbSkgez0KIGxpc3QudW5zaGlmdChpdGVtKTsgfTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG9wdHMuY3JlYXRlU2VhcmNoQ2hvaWNlUG9zaXRp b24gPTNEPTNEPTNEICdib3R0b20nKSB7CisgICAgICAgICAgICAgICAgb3B0cy5jcmVhdGVTZWFy Y2hDaG9pY2VQb3NpdGlvbiA9M0QgZnVuY3Rpb24obGlzdCwgaXRlbSkgez0KIGxpc3QucHVzaChp dGVtKTsgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZihvcHRz LmNyZWF0ZVNlYXJjaENob2ljZVBvc2l0aW9uKSAhPTNEPTNEICJmdW5jPQp0aW9uIikgIHsKKyAg ICAgICAgICAgICAgICB0aHJvdyAiaW52YWxpZCBjcmVhdGVTZWFyY2hDaG9pY2VQb3NpdGlvbiBv cHRpb24gbXVzdCBiZSAnPQp0b3AnLCAnYm90dG9tJyBvciBhIGN1c3RvbSBmdW5jdGlvbiI7Cisg ICAgICAgICAgICB9CisKICAgICAgICAgICAgIHJldHVybiBvcHRzOwogICAgICAgICB9LAo9MjAK QEAgLTk5OSw3ICsxMDk0LDcgQEAKICAgICAgICAgICovCiAgICAgICAgIC8vIGFic3RyYWN0CiAg ICAgICAgIG1vbml0b3JTb3VyY2U6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBlbCA9 M0QgdGhpcy5vcHRzLmVsZW1lbnQsIHN5bmM7CisgICAgICAgICAgICB2YXIgZWwgPTNEIHRoaXMu b3B0cy5lbGVtZW50LCBvYnNlcnZlciwgc2VsZiA9M0QgdGhpczsKPTIwCiAgICAgICAgICAgICBl bC5vbigiY2hhbmdlLnNlbGVjdDIiLCB0aGlzLmJpbmQoZnVuY3Rpb24gKGUpIHsKICAgICAgICAg ICAgICAgICBpZiAodGhpcy5vcHRzLmVsZW1lbnQuZGF0YSgic2VsZWN0Mi1jaGFuZ2UtdHJpZ2dl cmVkIikgIT0KPTNEPTNEIHRydWUpIHsKQEAgLTEwMDcsOSArMTEwMiw3IEBACiAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgfSkpOwo9MjAKLSAgICAgICAgICAgIHN5bmMgPTNEIHRoaXMu YmluZChmdW5jdGlvbiAoKSB7Ci0KLSAgICAgICAgICAgICAgICB2YXIgZW5hYmxlZCwgcmVhZG9u bHksIHNlbGYgPTNEIHRoaXM7CisgICAgICAgICAgICB0aGlzLl9zeW5jID0zRCB0aGlzLmJpbmQo ZnVuY3Rpb24gKCkgewo9MjAKICAgICAgICAgICAgICAgICAvLyBzeW5jIGVuYWJsZWQgc3RhdGUK ICAgICAgICAgICAgICAgICB2YXIgZGlzYWJsZWQgPTNEIGVsLnByb3AoImRpc2FibGVkIik7CkBA IC0xMDIxLDM1ICsxMTE0LDM0IEBACiAgICAgICAgICAgICAgICAgdGhpcy5yZWFkb25seShyZWFk b25seSk7Cj0yMAogICAgICAgICAgICAgICAgIHN5bmNDc3NDbGFzc2VzKHRoaXMuY29udGFpbmVy LCB0aGlzLm9wdHMuZWxlbWVudCwgdGhpcy5vcHQ9CnMuYWRhcHRDb250YWluZXJDc3NDbGFzcyk7 Ci0gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYWRkQ2xhc3MoZXZhbHVhdGUodGhpcy5v cHRzLmNvbnRhaW5lckNzc0NsYT0Kc3MpKTsKKyAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5l ci5hZGRDbGFzcyhldmFsdWF0ZSh0aGlzLm9wdHMuY29udGFpbmVyQ3NzQ2xhPQpzcywgdGhpcy5v cHRzLmVsZW1lbnQpKTsKPTIwCiAgICAgICAgICAgICAgICAgc3luY0Nzc0NsYXNzZXModGhpcy5k cm9wZG93biwgdGhpcy5vcHRzLmVsZW1lbnQsIHRoaXMub3B0cz0KLmFkYXB0RHJvcGRvd25Dc3ND bGFzcyk7Ci0gICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5hZGRDbGFzcyhldmFsdWF0ZSh0 aGlzLm9wdHMuZHJvcGRvd25Dc3NDbGFzcz0KKSk7CisgICAgICAgICAgICAgICAgdGhpcy5kcm9w ZG93bi5hZGRDbGFzcyhldmFsdWF0ZSh0aGlzLm9wdHMuZHJvcGRvd25Dc3NDbGFzcz0KLCB0aGlz Lm9wdHMuZWxlbWVudCkpOwo9MjAKICAgICAgICAgICAgIH0pOwo9MjAKLSAgICAgICAgICAgIC8v IG1vemlsbGEgYW5kIElFCi0gICAgICAgICAgICBlbC5vbigicHJvcGVydHljaGFuZ2Uuc2VsZWN0 MiBET01BdHRyTW9kaWZpZWQuc2VsZWN0MiIsIHN5bmMpOwotCi0KLSAgICAgICAgICAgIC8vIGhv bGQgb250byBhIHJlZmVyZW5jZSBvZiB0aGUgY2FsbGJhY2sgdG8gd29yayBhcm91bmQgYSBjaHJv PQptaXVtIGJ1ZwotICAgICAgICAgICAgaWYgKHRoaXMubXV0YXRpb25DYWxsYmFjayA9M0Q9M0Q9 M0QgdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5tdXRhdGlvbkNhbGxiYWNrID0z RCBmdW5jdGlvbiAobXV0YXRpb25zKSB7Ci0gICAgICAgICAgICAgICAgICAgIG11dGF0aW9ucy5m b3JFYWNoKHN5bmMpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIElFOC0xMCAo SUU5LzEwIHdvbid0IGZpcmUgcHJvcGVydHlDaGFuZ2UgdmlhIGF0dGFjaEV2ZW50TGlzPQp0ZW5l cikKKyAgICAgICAgICAgIGlmIChlbC5sZW5ndGggJiYgZWxbMF0uYXR0YWNoRXZlbnQpIHsKKyAg ICAgICAgICAgICAgICBlbC5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICB0 aGlzLmF0dGFjaEV2ZW50KCJvbnByb3BlcnR5Y2hhbmdlIiwgc2VsZi5fc3luYyk7CisgICAgICAg ICAgICAgICAgfSk7CiAgICAgICAgICAgICB9Cj0yMAotICAgICAgICAgICAgLy8gc2FmYXJpIGFu ZCBjaHJvbWUKLSAgICAgICAgICAgIGlmICh0eXBlb2YgV2ViS2l0TXV0YXRpb25PYnNlcnZlciAh PTNEPTNEICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAvLyBzYWZhcmksIGNocm9tZSwgZmly ZWZveCwgSUUxMQorICAgICAgICAgICAgb2JzZXJ2ZXIgPTNEIHdpbmRvdy5NdXRhdGlvbk9ic2Vy dmVyIHx8IHdpbmRvdy5XZWJLaXRNdXRhdGlvbk89CmJzZXJ2ZXJ8fCB3aW5kb3cuTW96TXV0YXRp b25PYnNlcnZlcjsKKyAgICAgICAgICAgIGlmIChvYnNlcnZlciAhPTNEPTNEIHVuZGVmaW5lZCkg ewogICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnR5T2JzZXJ2ZXIpIHsgZGVsZXRlIHRo aXMucHJvcGVydHlPYnNlcnZlcjs9CiB0aGlzLnByb3BlcnR5T2JzZXJ2ZXIgPTNEIG51bGw7IH0K LSAgICAgICAgICAgICAgICB0aGlzLnByb3BlcnR5T2JzZXJ2ZXIgPTNEIG5ldyBXZWJLaXRNdXRh dGlvbk9ic2VydmVyKHRoaXMuPQptdXRhdGlvbkNhbGxiYWNrKTsKKyAgICAgICAgICAgICAgICB0 aGlzLnByb3BlcnR5T2JzZXJ2ZXIgPTNEIG5ldyBvYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25z PQopIHsKKyAgICAgICAgICAgICAgICAgICAgJC5lYWNoKG11dGF0aW9ucywgc2VsZi5fc3luYyk7 CisgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eU9ic2Vy dmVyLm9ic2VydmUoZWwuZ2V0KDApLCB7IGF0dHJpYnV0ZXM6dHJ1ZT0KLCBzdWJ0cmVlOmZhbHNl IH0pOwogICAgICAgICAgICAgfQogICAgICAgICB9LAo9MjAKICAgICAgICAgLy8gYWJzdHJhY3QK ICAgICAgICAgdHJpZ2dlclNlbGVjdDogZnVuY3Rpb24oZGF0YSkgewotICAgICAgICAgICAgdmFy IGV2dCA9M0QgJC5FdmVudCgic2VsZWN0Mi1zZWxlY3RpbmciLCB7IHZhbDogdGhpcy5pZChkYXRh KSw9CiBvYmplY3Q6IGRhdGEgfSk7CisgICAgICAgICAgICB2YXIgZXZ0ID0zRCAkLkV2ZW50KCJz ZWxlY3QyLXNlbGVjdGluZyIsIHsgdmFsOiB0aGlzLmlkKGRhdGEpLD0KIG9iamVjdDogZGF0YSwg Y2hvaWNlOiBkYXRhIH0pOwogICAgICAgICAgICAgdGhpcy5vcHRzLmVsZW1lbnQudHJpZ2dlcihl dnQpOwogICAgICAgICAgICAgcmV0dXJuICFldnQuaXNEZWZhdWx0UHJldmVudGVkKCk7CiAgICAg ICAgIH0sCkBAIC0xMDcxLDcgKzExNjMsNyBAQAogICAgICAgICAgICAgLy8gc28gaGVyZSB3ZSB0 cmlnZ2VyIHRoZSBjbGljayBldmVudCBtYW51YWxseQogICAgICAgICAgICAgdGhpcy5vcHRzLmVs ZW1lbnQuY2xpY2soKTsKPTIwCi0gICAgICAgICAgICAvLyBWYWxpZGF0aW9uRW5naW5lIGlnbm9y ZWEgdGhlIGNoYW5nZSBldmVudCBhbmQgbGlzdGVucyBpbnN0ZT0KYWQgdG8gYmx1cgorICAgICAg ICAgICAgLy8gVmFsaWRhdGlvbkVuZ2luZSBpZ25vcmVzIHRoZSBjaGFuZ2UgZXZlbnQgYW5kIGxp c3RlbnMgaW5zdGU9CmFkIHRvIGJsdXIKICAgICAgICAgICAgIC8vIHNvIGhlcmUgd2UgdHJpZ2dl ciB0aGUgYmx1ciBldmVudCBtYW51YWxseSBpZiBzbyBkZXNpcmVkCiAgICAgICAgICAgICBpZiAo dGhpcy5vcHRzLmJsdXJPbkNoYW5nZSkKICAgICAgICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVu dC5ibHVyKCk7CkBAIC0xMTE1LDE3ICsxMjA3LDE2IEBACiAgICAgICAgIC8vIGFic3RyYWN0CiAg ICAgICAgIHJlYWRvbmx5OiBmdW5jdGlvbihlbmFibGVkKSB7CiAgICAgICAgICAgICBpZiAoZW5h YmxlZCA9M0Q9M0Q9M0QgdW5kZWZpbmVkKSBlbmFibGVkID0zRCBmYWxzZTsKLSAgICAgICAgICAg IGlmICh0aGlzLl9yZWFkb25seSA9M0Q9M0Q9M0QgZW5hYmxlZCkgcmV0dXJuIGZhbHNlOworICAg ICAgICAgICAgaWYgKHRoaXMuX3JlYWRvbmx5ID0zRD0zRD0zRCBlbmFibGVkKSByZXR1cm47CiAg ICAgICAgICAgICB0aGlzLl9yZWFkb25seSA9M0QgZW5hYmxlZDsKPTIwCiAgICAgICAgICAgICB0 aGlzLm9wdHMuZWxlbWVudC5wcm9wKCJyZWFkb25seSIsIGVuYWJsZWQpOwogICAgICAgICAgICAg dGhpcy5lbmFibGVJbnRlcmZhY2UoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg ICB9LAo9MjAKICAgICAgICAgLy8gYWJzdHJhY3QKICAgICAgICAgb3BlbmVkOiBmdW5jdGlvbiAo KSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuaGFzQ2xhc3MoInNlbGVjdDIt ZHJvcGRvd24tb3BlbiIpOworICAgICAgICAgICAgcmV0dXJuICh0aGlzLmNvbnRhaW5lcikgPyB0 aGlzLmNvbnRhaW5lci5oYXNDbGFzcygic2VsZWN0Mi1kcm89CnBkb3duLW9wZW4iKSA6IGZhbHNl OwogICAgICAgICB9LAo9MjAKICAgICAgICAgLy8gYWJzdHJhY3QKQEAgLTExMzUsMjAgKzEyMjYs NTggQEAKICAgICAgICAgICAgICAgICBoZWlnaHQgPTNEIHRoaXMuY29udGFpbmVyLm91dGVySGVp Z2h0KGZhbHNlKSwKICAgICAgICAgICAgICAgICB3aWR0aCA9M0QgdGhpcy5jb250YWluZXIub3V0 ZXJXaWR0aChmYWxzZSksCiAgICAgICAgICAgICAgICAgZHJvcEhlaWdodCA9M0QgJGRyb3Bkb3du Lm91dGVySGVpZ2h0KGZhbHNlKSwKLSAgICAgICAgICAgICAgICB2aWV3UG9ydFJpZ2h0ID0zRCAk KHdpbmRvdykuc2Nyb2xsTGVmdCgpICsgJCh3aW5kb3cpLndpZHRoPQooKSwKLSAgICAgICAgICAg ICAgICB2aWV3cG9ydEJvdHRvbSA9M0QgJCh3aW5kb3cpLnNjcm9sbFRvcCgpICsgJCh3aW5kb3cp LmhlaWdoPQp0KCksCisgICAgICAgICAgICAgICAgJHdpbmRvdyA9M0QgJCh3aW5kb3cpLAorICAg ICAgICAgICAgICAgIHdpbmRvd1dpZHRoID0zRCAkd2luZG93LndpZHRoKCksCisgICAgICAgICAg ICAgICAgd2luZG93SGVpZ2h0ID0zRCAkd2luZG93LmhlaWdodCgpLAorICAgICAgICAgICAgICAg IHZpZXdQb3J0UmlnaHQgPTNEICR3aW5kb3cuc2Nyb2xsTGVmdCgpICsgd2luZG93V2lkdGgsCisg ICAgICAgICAgICAgICAgdmlld3BvcnRCb3R0b20gPTNEICR3aW5kb3cuc2Nyb2xsVG9wKCkgKyB3 aW5kb3dIZWlnaHQsCiAgICAgICAgICAgICAgICAgZHJvcFRvcCA9M0Qgb2Zmc2V0LnRvcCArIGhl aWdodCwKICAgICAgICAgICAgICAgICBkcm9wTGVmdCA9M0Qgb2Zmc2V0LmxlZnQsCiAgICAgICAg ICAgICAgICAgZW5vdWdoUm9vbUJlbG93ID0zRCBkcm9wVG9wICsgZHJvcEhlaWdodCA8PTNEIHZp ZXdwb3J0Qm90dD0Kb20sCi0gICAgICAgICAgICAgICAgZW5vdWdoUm9vbUFib3ZlID0zRCAob2Zm c2V0LnRvcCAtIGRyb3BIZWlnaHQpID49M0QgdGhpcy5ibz0KZHkoKS5zY3JvbGxUb3AoKSwKKyAg ICAgICAgICAgICAgICBlbm91Z2hSb29tQWJvdmUgPTNEIChvZmZzZXQudG9wIC0gZHJvcEhlaWdo dCkgPj0zRCAkd2luZG93PQouc2Nyb2xsVG9wKCksCiAgICAgICAgICAgICAgICAgZHJvcFdpZHRo ID0zRCAkZHJvcGRvd24ub3V0ZXJXaWR0aChmYWxzZSksCiAgICAgICAgICAgICAgICAgZW5vdWdo Um9vbU9uUmlnaHQgPTNEIGRyb3BMZWZ0ICsgZHJvcFdpZHRoIDw9M0Qgdmlld1BvcnRSaT0KZ2h0 LAogICAgICAgICAgICAgICAgIGFib3ZlTm93ID0zRCAkZHJvcGRvd24uaGFzQ2xhc3MoInNlbGVj dDItZHJvcC1hYm92ZSIpLAogICAgICAgICAgICAgICAgIGJvZHlPZmZzZXQsCiAgICAgICAgICAg ICAgICAgYWJvdmUsCisgICAgICAgICAgICAgICAgY2hhbmdlRGlyZWN0aW9uLAogICAgICAgICAg ICAgICAgIGNzcywKICAgICAgICAgICAgICAgICByZXN1bHRzTGlzdE5vZGU7Cj0yMAorICAgICAg ICAgICAgLy8gYWx3YXlzIHByZWZlciB0aGUgY3VycmVudCBhYm92ZS9iZWxvdyBhbGlnbm1lbnQs IHVubGVzcyB0aGU9CnJlIGlzIG5vdCBlbm91Z2ggcm9vbQorICAgICAgICAgICAgaWYgKGFib3Zl Tm93KSB7CisgICAgICAgICAgICAgICAgYWJvdmUgPTNEIHRydWU7CisgICAgICAgICAgICAgICAg aWYgKCFlbm91Z2hSb29tQWJvdmUgJiYgZW5vdWdoUm9vbUJlbG93KSB7CisgICAgICAgICAgICAg ICAgICAgIGNoYW5nZURpcmVjdGlvbiA9M0QgdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYWJv dmUgPTNEIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgYWJvdmUgPTNEIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghZW5v dWdoUm9vbUJlbG93ICYmIGVub3VnaFJvb21BYm92ZSkgeworICAgICAgICAgICAgICAgICAgICBj aGFuZ2VEaXJlY3Rpb24gPTNEIHRydWU7CisgICAgICAgICAgICAgICAgICAgIGFib3ZlID0zRCB0 cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy9p ZiB3ZSBhcmUgY2hhbmdpbmcgZGlyZWN0aW9uIHdlIG5lZWQgdG8gZ2V0IHBvc2l0aW9ucyB3aGVu IGQ9CnJvcGRvd24gaXMgaGlkZGVuOworICAgICAgICAgICAgaWYgKGNoYW5nZURpcmVjdGlvbikg eworICAgICAgICAgICAgICAgICRkcm9wZG93bi5oaWRlKCk7CisgICAgICAgICAgICAgICAgb2Zm c2V0ID0zRCB0aGlzLmNvbnRhaW5lci5vZmZzZXQoKTsKKyAgICAgICAgICAgICAgICBoZWlnaHQg PTNEIHRoaXMuY29udGFpbmVyLm91dGVySGVpZ2h0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICB3 aWR0aCA9M0QgdGhpcy5jb250YWluZXIub3V0ZXJXaWR0aChmYWxzZSk7CisgICAgICAgICAgICAg ICAgZHJvcEhlaWdodCA9M0QgJGRyb3Bkb3duLm91dGVySGVpZ2h0KGZhbHNlKTsKKyAgICAgICAg ICAgICAgICB2aWV3UG9ydFJpZ2h0ID0zRCAkd2luZG93LnNjcm9sbExlZnQoKSArIHdpbmRvd1dp ZHRoOworICAgICAgICAgICAgICAgIHZpZXdwb3J0Qm90dG9tID0zRCAkd2luZG93LnNjcm9sbFRv cCgpICsgd2luZG93SGVpZ2h0OworICAgICAgICAgICAgICAgIGRyb3BUb3AgPTNEIG9mZnNldC50 b3AgKyBoZWlnaHQ7CisgICAgICAgICAgICAgICAgZHJvcExlZnQgPTNEIG9mZnNldC5sZWZ0Owor ICAgICAgICAgICAgICAgIGRyb3BXaWR0aCA9M0QgJGRyb3Bkb3duLm91dGVyV2lkdGgoZmFsc2Up OworICAgICAgICAgICAgICAgIGVub3VnaFJvb21PblJpZ2h0ID0zRCBkcm9wTGVmdCArIGRyb3BX aWR0aCA8PTNEIHZpZXdQb3J0Umk9CmdodDsKKyAgICAgICAgICAgICAgICAkZHJvcGRvd24uc2hv dygpOworCisgICAgICAgICAgICAgICAgLy8gZml4IHNvIHRoZSBjdXJzb3IgZG9lcyBub3QgbW92 ZSB0byB0aGUgbGVmdCB3aXRoaW4gdGhlID0Kc2VhcmNoLXRleHRib3ggaW4gSUUKKyAgICAgICAg ICAgICAgICB0aGlzLmZvY3VzU2VhcmNoKCk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAg IGlmICh0aGlzLm9wdHMuZHJvcGRvd25BdXRvV2lkdGgpIHsKICAgICAgICAgICAgICAgICByZXN1 bHRzTGlzdE5vZGUgPTNEICQoJy5zZWxlY3QyLXJlc3VsdHMnLCAkZHJvcGRvd24pWzBdOwogICAg ICAgICAgICAgICAgICRkcm9wZG93bi5hZGRDbGFzcygnc2VsZWN0Mi1kcm9wLWF1dG8td2lkdGgn KTsKQEAgLTExNTYsNiArMTI4NSw3IEBACiAgICAgICAgICAgICAgICAgLy8gQWRkIHNjcm9sbGJh ciB3aWR0aCB0byBkcm9wZG93biBpZiB2ZXJ0aWNhbCBzY3JvbGxiYXIgaT0KcyBwcmVzZW50CiAg ICAgICAgICAgICAgICAgZHJvcFdpZHRoID0zRCAkZHJvcGRvd24ub3V0ZXJXaWR0aChmYWxzZSkg KyAocmVzdWx0c0xpc3RObz0KZGUuc2Nyb2xsSGVpZ2h0ID0zRD0zRD0zRCByZXN1bHRzTGlzdE5v ZGUuY2xpZW50SGVpZ2h0ID8gMCA6IHNjcm9sbEJhckRpbWVuPQpzaW9ucy53aWR0aCk7CiAgICAg ICAgICAgICAgICAgZHJvcFdpZHRoID4gd2lkdGggPyB3aWR0aCA9M0QgZHJvcFdpZHRoIDogZHJv cFdpZHRoID0zRCB3aT0KZHRoOworICAgICAgICAgICAgICAgIGRyb3BIZWlnaHQgPTNEICRkcm9w ZG93bi5vdXRlckhlaWdodChmYWxzZSk7CiAgICAgICAgICAgICAgICAgZW5vdWdoUm9vbU9uUmln aHQgPTNEIGRyb3BMZWZ0ICsgZHJvcFdpZHRoIDw9M0Qgdmlld1BvcnRSaT0KZ2h0OwogICAgICAg ICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CkBAIC0xMTYzLDQzICsxMjkzLDM3IEBACiAgICAg ICAgICAgICB9Cj0yMAogICAgICAgICAgICAgLy9jb25zb2xlLmxvZygiYmVsb3cvIGRyb3B0b3A6 IiwgZHJvcFRvcCwgImRyb3BIZWlnaHQiLCBkcm9wSGU9CmlnaHQsICJzdW0iLCAoZHJvcFRvcCtk cm9wSGVpZ2h0KSsiIHZpZXdwb3J0IGJvdHRvbSIsIHZpZXdwb3J0Qm90dG9tLCAiZW5vdT0KZ2g/ IiwgZW5vdWdoUm9vbUJlbG93KTsKLSAgICAgICAgICAgIC8vY29uc29sZS5sb2coImFib3ZlLyBv ZmZzZXQudG9wIiwgb2Zmc2V0LnRvcCwgImRyb3BIZWlnaHQiLCBkPQpyb3BIZWlnaHQsICJ0b3Ai LCAob2Zmc2V0LnRvcC1kcm9wSGVpZ2h0KSwgInNjcm9sbFRvcCIsIHRoaXMuYm9keSgpLnNjcm9s bFQ9Cm9wKCksICJlbm91Z2g/IiwgZW5vdWdoUm9vbUFib3ZlKTsKKyAgICAgICAgICAgIC8vY29u c29sZS5sb2coImFib3ZlLyBvZmZzZXQudG9wIiwgb2Zmc2V0LnRvcCwgImRyb3BIZWlnaHQiLCBk PQpyb3BIZWlnaHQsICJ0b3AiLCAob2Zmc2V0LnRvcC1kcm9wSGVpZ2h0KSwgInNjcm9sbFRvcCIs IHRoaXMuYm9keS5zY3JvbGxUb3A9CigpLCAiZW5vdWdoPyIsIGVub3VnaFJvb21BYm92ZSk7Cj0y MAogICAgICAgICAgICAgLy8gZml4IHBvc2l0aW9uaW5nIHdoZW4gYm9keSBoYXMgYW4gb2Zmc2V0 IGFuZCBpcyBub3QgcG9zaXRpb249Cjogc3RhdGljCi0gICAgICAgICAgICBpZiAodGhpcy5ib2R5 KCkuY3NzKCdwb3NpdGlvbicpICE9M0Q9M0QgJ3N0YXRpYycpIHsKLSAgICAgICAgICAgICAgICBi b2R5T2Zmc2V0ID0zRCB0aGlzLmJvZHkoKS5vZmZzZXQoKTsKKyAgICAgICAgICAgIGlmICh0aGlz LmJvZHkuY3NzKCdwb3NpdGlvbicpICE9M0Q9M0QgJ3N0YXRpYycpIHsKKyAgICAgICAgICAgICAg ICBib2R5T2Zmc2V0ID0zRCB0aGlzLmJvZHkub2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAgZHJv cFRvcCAtPTNEIGJvZHlPZmZzZXQudG9wOwogICAgICAgICAgICAgICAgIGRyb3BMZWZ0IC09M0Qg Ym9keU9mZnNldC5sZWZ0OwogICAgICAgICAgICAgfQo9MjAKLSAgICAgICAgICAgIC8vIGFsd2F5 cyBwcmVmZXIgdGhlIGN1cnJlbnQgYWJvdmUvYmVsb3cgYWxpZ25tZW50LCB1bmxlc3MgdGhlPQpy ZSBpcyBub3QgZW5vdWdoIHJvb20KLSAgICAgICAgICAgIGlmIChhYm92ZU5vdykgewotICAgICAg ICAgICAgICAgIGFib3ZlID0zRCB0cnVlOwotICAgICAgICAgICAgICAgIGlmICghZW5vdWdoUm9v bUFib3ZlICYmIGVub3VnaFJvb21CZWxvdykgYWJvdmUgPTNEIGZhbHNlOwotICAgICAgICAgICAg fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBhYm92ZSA9M0QgZmFsc2U7Ci0gICAgICAgICAgICAg ICAgaWYgKCFlbm91Z2hSb29tQmVsb3cgJiYgZW5vdWdoUm9vbUFib3ZlKSBhYm92ZSA9M0QgdHJ1 ZTsKKyAgICAgICAgICAgIGlmICghZW5vdWdoUm9vbU9uUmlnaHQpIHsKKyAgICAgICAgICAgICAg ICBkcm9wTGVmdCA9M0Qgb2Zmc2V0LmxlZnQgKyB0aGlzLmNvbnRhaW5lci5vdXRlcldpZHRoKGZh bHNlPQopIC0gZHJvcFdpZHRoOwogICAgICAgICAgICAgfQo9MjAKLSAgICAgICAgICAgIGlmICgh ZW5vdWdoUm9vbU9uUmlnaHQpIHsKLSAgICAgICAgICAgICAgIGRyb3BMZWZ0ID0zRCBvZmZzZXQu bGVmdCArIHdpZHRoIC0gZHJvcFdpZHRoOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgY3Nz ID0zRCAgeworICAgICAgICAgICAgICAgIGxlZnQ6IGRyb3BMZWZ0LAorICAgICAgICAgICAgICAg IHdpZHRoOiB3aWR0aAorICAgICAgICAgICAgfTsKPTIwCiAgICAgICAgICAgICBpZiAoYWJvdmUp IHsKLSAgICAgICAgICAgICAgICBkcm9wVG9wID0zRCBvZmZzZXQudG9wIC0gZHJvcEhlaWdodDsK KyAgICAgICAgICAgICAgICBjc3MudG9wID0zRCBvZmZzZXQudG9wIC0gZHJvcEhlaWdodDsKKyAg ICAgICAgICAgICAgICBjc3MuYm90dG9tID0zRCAnYXV0byc7CiAgICAgICAgICAgICAgICAgdGhp cy5jb250YWluZXIuYWRkQ2xhc3MoInNlbGVjdDItZHJvcC1hYm92ZSIpOwogICAgICAgICAgICAg ICAgICRkcm9wZG93bi5hZGRDbGFzcygic2VsZWN0Mi1kcm9wLWFib3ZlIik7CiAgICAgICAgICAg ICB9CiAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjc3MudG9wID0zRCBkcm9w VG9wOworICAgICAgICAgICAgICAgIGNzcy5ib3R0b20gPTNEICdhdXRvJzsKICAgICAgICAgICAg ICAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmVDbGFzcygic2VsZWN0Mi1kcm9wLWFib3ZlIik7CiAg ICAgICAgICAgICAgICAgJGRyb3Bkb3duLnJlbW92ZUNsYXNzKCJzZWxlY3QyLWRyb3AtYWJvdmUi KTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY3NzID0zRCAkLmV4dGVuZCh7Ci0gICAg ICAgICAgICAgICAgdG9wOiBkcm9wVG9wLAotICAgICAgICAgICAgICAgIGxlZnQ6IGRyb3BMZWZ0 LAotICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aAotICAgICAgICAgICAgfSwgZXZhbHVhdGUo dGhpcy5vcHRzLmRyb3Bkb3duQ3NzKSk7CisgICAgICAgICAgICBjc3MgPTNEICQuZXh0ZW5kKGNz cywgZXZhbHVhdGUodGhpcy5vcHRzLmRyb3Bkb3duQ3NzLCB0aGlzLm9wdD0Kcy5lbGVtZW50KSk7 Cj0yMAogICAgICAgICAgICAgJGRyb3Bkb3duLmNzcyhjc3MpOwogICAgICAgICB9LApAQCAtMTIz Nyw2ICsxMzYxLDEyIEBACj0yMAogICAgICAgICAgICAgdGhpcy5vcGVuaW5nKCk7Cj0yMAorICAg ICAgICAgICAgLy8gT25seSBiaW5kIHRoZSBkb2N1bWVudCBtb3VzZW1vdmUgd2hlbiB0aGUgZHJv cGRvd24gaXMgdmlzaWI9CmxlCisgICAgICAgICAgICAkZG9jdW1lbnQub24oIm1vdXNlbW92ZS5z ZWxlY3QyRXZlbnQiLCBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgICAgIGxhc3RNb3VzZVBv c2l0aW9uLnggPTNEIGUucGFnZVg7CisgICAgICAgICAgICAgICAgbGFzdE1vdXNlUG9zaXRpb24u eSA9M0QgZS5wYWdlWTsKKyAgICAgICAgICAgIH0pOworCiAgICAgICAgICAgICByZXR1cm4gdHJ1 ZTsKICAgICAgICAgfSwKPTIwCkBAIC0xMjQ1LDM1ICsxMzc1LDM4IEBACiAgICAgICAgICAqLwog ICAgICAgICAvLyBhYnN0cmFjdAogICAgICAgICBvcGVuaW5nOiBmdW5jdGlvbigpIHsKLSAgICAg ICAgICAgIHZhciBjaWQgPTNEIHRoaXMuY29udGFpbmVySWQsCisgICAgICAgICAgICB2YXIgY2lk ID0zRCB0aGlzLmNvbnRhaW5lckV2ZW50TmFtZSwKICAgICAgICAgICAgICAgICBzY3JvbGwgPTNE ICJzY3JvbGwuIiArIGNpZCwKICAgICAgICAgICAgICAgICByZXNpemUgPTNEICJyZXNpemUuIitj aWQsCiAgICAgICAgICAgICAgICAgb3JpZW50ID0zRCAib3JpZW50YXRpb25jaGFuZ2UuIitjaWQs Ci0gICAgICAgICAgICAgICAgbWFzaywgbWFza0NzczsKKyAgICAgICAgICAgICAgICBtYXNrOwo9 MjAKICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFkZENsYXNzKCJzZWxlY3QyLWRyb3Bkb3du LW9wZW4iKS5hZGRDbGFzcygic2VsPQplY3QyLWNvbnRhaW5lci1hY3RpdmUiKTsKPTIwCiAgICAg ICAgICAgICB0aGlzLmNsZWFyRHJvcGRvd25BbGlnbm1lbnRQcmVmZXJlbmNlKCk7Cj0yMAotICAg ICAgICAgICAgaWYodGhpcy5kcm9wZG93blswXSAhPTNEPTNEIHRoaXMuYm9keSgpLmNoaWxkcmVu KCkubGFzdCgpWzBdKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5kZXRhY2goKS5h cHBlbmRUbyh0aGlzLmJvZHkoKSk7CisgICAgICAgICAgICBpZih0aGlzLmRyb3Bkb3duWzBdICE9 M0Q9M0QgdGhpcy5ib2R5LmNoaWxkcmVuKCkubGFzdCgpWzBdKSB7CisgICAgICAgICAgICAgICAg dGhpcy5kcm9wZG93bi5kZXRhY2goKS5hcHBlbmRUbyh0aGlzLmJvZHkpOwogICAgICAgICAgICAg fQo9MjAKLSAgICAgICAgICAgIC8vIGNyZWF0ZSB0aGUgZHJvcGRvd24gbWFzayBpZiBkb2VzbnQg YWxyZWFkeSBleGlzdAorICAgICAgICAgICAgLy8gY3JlYXRlIHRoZSBkcm9wZG93biBtYXNrIGlm IGRvZXNuJ3QgYWxyZWFkeSBleGlzdAogICAgICAgICAgICAgbWFzayA9M0QgJCgiI3NlbGVjdDIt ZHJvcC1tYXNrIik7CiAgICAgICAgICAgICBpZiAobWFzay5sZW5ndGggPTNEPTNEIDApIHsKICAg ICAgICAgICAgICAgICBtYXNrID0zRCAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTsK ICAgICAgICAgICAgICAgICBtYXNrLmF0dHIoImlkIiwic2VsZWN0Mi1kcm9wLW1hc2siKS5hdHRy KCJjbGFzcyIsInNlbGVjdDItPQpkcm9wLW1hc2siKTsKICAgICAgICAgICAgICAgICBtYXNrLmhp ZGUoKTsKLSAgICAgICAgICAgICAgICBtYXNrLmFwcGVuZFRvKHRoaXMuYm9keSgpKTsKKyAgICAg ICAgICAgICAgICBtYXNrLmFwcGVuZFRvKHRoaXMuYm9keSk7CiAgICAgICAgICAgICAgICAgbWFz ay5vbigibW91c2Vkb3duIHRvdWNoc3RhcnQgY2xpY2siLCBmdW5jdGlvbiAoZSkgeworICAgICAg ICAgICAgICAgICAgICAvLyBQcmV2ZW50IElFIGZyb20gZ2VuZXJhdGluZyBhIGNsaWNrIGV2ZW50 IG9uIHRoZSBib2R5CisgICAgICAgICAgICAgICAgICAgIHJlaW5zZXJ0RWxlbWVudChtYXNrKTsK KwogICAgICAgICAgICAgICAgICAgICB2YXIgZHJvcGRvd24gPTNEICQoIiNzZWxlY3QyLWRyb3Ai KSwgc2VsZjsKICAgICAgICAgICAgICAgICAgICAgaWYgKGRyb3Bkb3duLmxlbmd0aCA+IDApIHsK ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGY9M0Rkcm9wZG93bi5kYXRhKCJzZWxlY3QyIik7 CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5vcHRzLnNlbGVjdE9uQmx1cikgewog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0SGlnaGxpZ2h0ZWQoe25vRm9j dXM6IHRydWV9KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg ICAgICAgIHNlbGYuY2xvc2Uoe2ZvY3VzOmZhbHNlfSk7CisgICAgICAgICAgICAgICAgICAgICAg ICBzZWxmLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0 KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAg ICAgICAgICAgICAgICB9CkBAIC0xMzAzLDcgKzE0MzYsNyBAQAogICAgICAgICAgICAgdmFyIHRo YXQgPTNEIHRoaXM7CiAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5wYXJlbnRzKCkuYWRkKHdp bmRvdykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgJCh0aGlzKS5vbihyZXNp emUrIiAiK3Njcm9sbCsiICIrb3JpZW50LCBmdW5jdGlvbiAoZSkgewotICAgICAgICAgICAgICAg ICAgICB0aGF0LnBvc2l0aW9uRHJvcGRvd24oKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRo YXQub3BlbmVkKCkpIHRoYXQucG9zaXRpb25Ecm9wZG93bigpOwogICAgICAgICAgICAgICAgIH0p OwogICAgICAgICAgICAgfSk7Cj0yMApAQCAtMTMxNCw3ICsxNDQ3LDcgQEAKICAgICAgICAgY2xv c2U6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgIGlmICghdGhpcy5vcGVuZWQoKSkgcmV0dXJu Owo9MjAKLSAgICAgICAgICAgIHZhciBjaWQgPTNEIHRoaXMuY29udGFpbmVySWQsCisgICAgICAg ICAgICB2YXIgY2lkID0zRCB0aGlzLmNvbnRhaW5lckV2ZW50TmFtZSwKICAgICAgICAgICAgICAg ICBzY3JvbGwgPTNEICJzY3JvbGwuIiArIGNpZCwKICAgICAgICAgICAgICAgICByZXNpemUgPTNE ICJyZXNpemUuIitjaWQsCiAgICAgICAgICAgICAgICAgb3JpZW50ID0zRCAib3JpZW50YXRpb25j aGFuZ2UuIitjaWQ7CkBAIC0xMzMwLDYgKzE0NjMsOCBAQAogICAgICAgICAgICAgdGhpcy5jb250 YWluZXIucmVtb3ZlQ2xhc3MoInNlbGVjdDItZHJvcGRvd24tb3BlbiIpLnJlbW92ZUNsYXM9CnMo InNlbGVjdDItY29udGFpbmVyLWFjdGl2ZSIpOwogICAgICAgICAgICAgdGhpcy5yZXN1bHRzLmVt cHR5KCk7Cj0yMAorICAgICAgICAgICAgLy8gTm93IHRoYXQgdGhlIGRyb3Bkb3duIGlzIGNsb3Nl ZCwgdW5iaW5kIHRoZSBnbG9iYWwgZG9jdW1lbnQ9CiBtb3VzZW1vdmUgZXZlbnQKKyAgICAgICAg ICAgICRkb2N1bWVudC5vZmYoIm1vdXNlbW92ZS5zZWxlY3QyRXZlbnQiKTsKPTIwCiAgICAgICAg ICAgICB0aGlzLmNsZWFyU2VhcmNoKCk7CiAgICAgICAgICAgICB0aGlzLnNlYXJjaC5yZW1vdmVD bGFzcygic2VsZWN0Mi1hY3RpdmUiKTsKQEAgLTEzNTMsMTIgKzE0ODgsMTIgQEAKPTIwCiAgICAg ICAgIC8vYWJzdHJhY3QKICAgICAgICAgZ2V0TWF4aW11bVNlbGVjdGlvblNpemU6IGZ1bmN0aW9u KCkgewotICAgICAgICAgICAgcmV0dXJuIGV2YWx1YXRlKHRoaXMub3B0cy5tYXhpbXVtU2VsZWN0 aW9uU2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gZXZhbHVhdGUodGhpcy5vcHRzLm1heGltdW1T ZWxlY3Rpb25TaXplLCB0aGlzLm9wdHMuZWxlbT0KZW50KTsKICAgICAgICAgfSwKPTIwCiAgICAg ICAgIC8vIGFic3RyYWN0CiAgICAgICAgIGVuc3VyZUhpZ2hsaWdodFZpc2libGU6IGZ1bmN0aW9u ICgpIHsKLSAgICAgICAgICAgIHZhciByZXN1bHRzID0zRCB0aGlzLnJlc3VsdHMsIGNoaWxkcmVu LCBpbmRleCwgY2hpbGQsIGhiLCByYiwgPQp5LCBtb3JlOworICAgICAgICAgICAgdmFyIHJlc3Vs dHMgPTNEIHRoaXMucmVzdWx0cywgY2hpbGRyZW4sIGluZGV4LCBjaGlsZCwgaGIsIHJiLCA9Cnks IG1vcmUsIHRvcE9mZnNldDsKPTIwCiAgICAgICAgICAgICBpbmRleCA9M0QgdGhpcy5oaWdobGln aHQoKTsKPTIwCkBAIC0xMzc4LDcgKzE1MTMsOSBAQAo9MjAKICAgICAgICAgICAgIGNoaWxkID0z RCAkKGNoaWxkcmVuW2luZGV4XSk7Cj0yMAotICAgICAgICAgICAgaGIgPTNEIGNoaWxkLm9mZnNl dCgpLnRvcCArIGNoaWxkLm91dGVySGVpZ2h0KHRydWUpOworICAgICAgICAgICAgdG9wT2Zmc2V0 ID0zRCAoY2hpbGQub2Zmc2V0KCkgfHwge30pLnRvcCB8fCAwOworCisgICAgICAgICAgICBoYiA9 M0QgdG9wT2Zmc2V0ICsgY2hpbGQub3V0ZXJIZWlnaHQodHJ1ZSk7Cj0yMAogICAgICAgICAgICAg Ly8gaWYgdGhpcyBpcyB0aGUgbGFzdCBjaGlsZCBsZXRzIGFsc28gbWFrZSBzdXJlIHNlbGVjdDIt bW9yZS09CnJlc3VsdHMgaXMgdmlzaWJsZQogICAgICAgICAgICAgaWYgKGluZGV4ID0zRD0zRD0z RCBjaGlsZHJlbi5sZW5ndGggLSAxKSB7CkBAIC0xMzkyLDcgKzE1MjksNyBAQAogICAgICAgICAg ICAgaWYgKGhiID4gcmIpIHsKICAgICAgICAgICAgICAgICByZXN1bHRzLnNjcm9sbFRvcChyZXN1 bHRzLnNjcm9sbFRvcCgpICsgKGhiIC0gcmIpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg IHkgPTNEIGNoaWxkLm9mZnNldCgpLnRvcCAtIHJlc3VsdHMub2Zmc2V0KCkudG9wOworICAgICAg ICAgICAgeSA9M0QgdG9wT2Zmc2V0IC0gcmVzdWx0cy5vZmZzZXQoKS50b3A7Cj0yMAogICAgICAg ICAgICAgLy8gbWFrZSBzdXJlIHRoZSB0b3Agb2YgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZQogICAg ICAgICAgICAgaWYgKHkgPCAwICYmIGNoaWxkLmNzcygnZGlzcGxheScpICE9M0QgJ25vbmUnICkg ewpAQCAtMTQwMiw3ICsxNTM5LDcgQEAKPTIwCiAgICAgICAgIC8vIGFic3RyYWN0CiAgICAgICAg IGZpbmRIaWdobGlnaHRhYmxlQ2hvaWNlczogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1 cm4gdGhpcy5yZXN1bHRzLmZpbmQoIi5zZWxlY3QyLXJlc3VsdC1zZWxlY3RhYmxlOm5vdCguc2Vs ZT0KY3QyLWRpc2FibGVkKSIpOworICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0cy5maW5k KCIuc2VsZWN0Mi1yZXN1bHQtc2VsZWN0YWJsZTpub3QoLnNlbGU9CmN0Mi1kaXNhYmxlZCk6bm90 KC5zZWxlY3QyLXNlbGVjdGVkKSIpOwogICAgICAgICB9LAo9MjAKICAgICAgICAgLy8gYWJzdHJh Y3QKQEAgLTE0MzgsOCArMTU3NSwxMyBAQAogICAgICAgICAgICAgY2hvaWNlID0zRCAkKGNob2lj ZXNbaW5kZXhdKTsKICAgICAgICAgICAgIGNob2ljZS5hZGRDbGFzcygic2VsZWN0Mi1oaWdobGln aHRlZCIpOwo9MjAKKyAgICAgICAgICAgIC8vIGVuc3VyZSBhc3Npc3RpdmUgdGVjaG5vbG9neSBj YW4gZGV0ZXJtaW5lIHRoZSBhY3RpdmUgY2hvaWNlCisgICAgICAgICAgICB0aGlzLnNlYXJjaC5h dHRyKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLCBjaG9pY2UuZmluZCgiLnNlbGVjdD0KMi1yZXN1 bHQtbGFiZWwiKS5hdHRyKCJpZCIpKTsKKwogICAgICAgICAgICAgdGhpcy5lbnN1cmVIaWdobGln aHRWaXNpYmxlKCk7Cj0yMAorICAgICAgICAgICAgdGhpcy5saXZlUmVnaW9uLnRleHQoY2hvaWNl LnRleHQoKSk7CisKICAgICAgICAgICAgIGRhdGEgPTNEIGNob2ljZS5kYXRhKCJzZWxlY3QyLWRh dGEiKTsKICAgICAgICAgICAgIGlmIChkYXRhKSB7CiAgICAgICAgICAgICAgICAgdGhpcy5vcHRz LmVsZW1lbnQudHJpZ2dlcih7IHR5cGU6ICJzZWxlY3QyLWhpZ2hsaWdodCIsIHZhbD0KOiB0aGlz LmlkKGRhdGEpLCBjaG9pY2U6IGRhdGEgfSk7CkBAIC0xNDUwLDYgKzE1OTIsMTQgQEAKICAgICAg ICAgICAgIHRoaXMucmVzdWx0cy5maW5kKCIuc2VsZWN0Mi1oaWdobGlnaHRlZCIpLnJlbW92ZUNs YXNzKCJzZWxlY3QyPQotaGlnaGxpZ2h0ZWQiKTsKICAgICAgICAgfSwKPTIwCisgICAgICAgIHRv dWNoTW92ZWQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdGhpcy5fdG91Y2hNb3ZlZCA9M0Qg dHJ1ZTsKKyAgICAgICAgfSwKKworICAgICAgICBjbGVhclRvdWNoTW92ZWQ6IGZ1bmN0aW9uKCkg eworICAgICAgICAgIHRoaXMuX3RvdWNoTW92ZWQgPTNEIGZhbHNlOworICAgICAgICB9LAorCiAg ICAgICAgIC8vIGFic3RyYWN0CiAgICAgICAgIGNvdW50U2VsZWN0YWJsZVJlc3VsdHM6IGZ1bmN0 aW9uKCkgewogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZEhpZ2hsaWdodGFibGVDaG9pY2Vz KCkubGVuZ3RoOwpAQCAtMTQ3Miw3ICsxNjIyLDYgQEAKICAgICAgICAgICAgIHZhciByZXN1bHRz ID0zRCB0aGlzLnJlc3VsdHMsCiAgICAgICAgICAgICAgICAgbW9yZSA9M0QgcmVzdWx0cy5maW5k KCJsaS5zZWxlY3QyLW1vcmUtcmVzdWx0cyIpLAogICAgICAgICAgICAgICAgIGJlbG93LCAvLyBw aXhlbHMgdGhlIGVsZW1lbnQgaXMgYmVsb3cgdGhlIHNjcm9sbCBmb2xkLCBiZWw9Cm93PTNEPTNE MCBpcyB3aGVuIHRoZSBlbGVtZW50IGlzIHN0YXJ0aW5nIHRvIGJlIHZpc2libGUKLSAgICAgICAg ICAgICAgICBvZmZzZXQgPTNEIC0xLCAvLyBpbmRleCBvZiBmaXJzdCBlbGVtZW50IHdpdGhvdXQg ZGF0YQogICAgICAgICAgICAgICAgIHBhZ2UgPTNEIHRoaXMucmVzdWx0c1BhZ2UgKyAxLAogICAg ICAgICAgICAgICAgIHNlbGY9M0R0aGlzLAogICAgICAgICAgICAgICAgIHRlcm09M0R0aGlzLnNl YXJjaC52YWwoKSwKQEAgLTE0OTksNyArMTY0OCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNl bGYucG9zdHByb2Nlc3NSZXN1bHRzKGRhdGEsIGZhbHNlLCBmYWxzZSk7Cj0yMAogICAgICAgICAg ICAgICAgICAgICBpZiAoZGF0YS5tb3JlPTNEPTNEPTNEdHJ1ZSkgewotICAgICAgICAgICAgICAg ICAgICAgICAgbW9yZS5kZXRhY2goKS5hcHBlbmRUbyhyZXN1bHRzKS50ZXh0KHNlbGYub3B0cy5m b3I9Cm1hdExvYWRNb3JlKHBhZ2UrMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbW9yZS5k ZXRhY2goKS5hcHBlbmRUbyhyZXN1bHRzKS50ZXh0KGV2YWx1YXRlKHNlbGY9Ci5vcHRzLmZvcm1h dExvYWRNb3JlLCBzZWxmLm9wdHMuZWxlbWVudCwgcGFnZSsxKSk7CiAgICAgICAgICAgICAgICAg ICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsgc2VsZi5sb2FkTW9yZUlmTmVl ZD0KZWQoKTsgfSwgMTApOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg ICAgICAgICAgICAgICAgbW9yZS5yZW1vdmUoKTsKQEAgLTE1NDgsNiArMTY5NywxMiBAQAogICAg ICAgICAgICAgZnVuY3Rpb24gcG9zdFJlbmRlcigpIHsKICAgICAgICAgICAgICAgICBzZWFyY2gu cmVtb3ZlQ2xhc3MoInNlbGVjdDItYWN0aXZlIik7CiAgICAgICAgICAgICAgICAgc2VsZi5wb3Np dGlvbkRyb3Bkb3duKCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdHMuZmluZCgnLnNlbGVj dDItbm8tcmVzdWx0cywuc2VsZWN0Mi1zZWxlY3Rpb24tbD0KaW1pdCwuc2VsZWN0Mi1zZWFyY2hp bmcnKS5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5saXZlUmVnaW9uLnRleHQo cmVzdWx0cy50ZXh0KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl IHsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5saXZlUmVnaW9uLnRleHQoc2VsZi5vcHRzLmZv cm1hdE1hdGNoZXMocmVzdWx0cy5mPQppbmQoJy5zZWxlY3QyLXJlc3VsdC1zZWxlY3RhYmxlJyku bGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQo9MjAKICAgICAgICAg ICAgIGZ1bmN0aW9uIHJlbmRlcihodG1sKSB7CkBAIC0xNTYxLDE0ICsxNzE2LDE0IEBACiAgICAg ICAgICAgICBpZiAobWF4U2VsU2l6ZSA+PTNEMSkgewogICAgICAgICAgICAgICAgIGRhdGEgPTNE IHRoaXMuZGF0YSgpOwogICAgICAgICAgICAgICAgIGlmICgkLmlzQXJyYXkoZGF0YSkgJiYgZGF0 YS5sZW5ndGggPj0zRCBtYXhTZWxTaXplICYmIGNoZWM9CmtGb3JtYXR0ZXIob3B0cy5mb3JtYXRT ZWxlY3Rpb25Ub29CaWcsICJmb3JtYXRTZWxlY3Rpb25Ub29CaWciKSkgewotICAgICAgICAgICAg ICAgICAgICByZW5kZXIoIjxsaSBjbGFzcz0zRCdzZWxlY3QyLXNlbGVjdGlvbi1saW1pdCc+IiAr IG9wdHM9Ci5mb3JtYXRTZWxlY3Rpb25Ub29CaWcobWF4U2VsU2l6ZSkgKyAiPC9saT4iKTsKKyAg ICAgICAgICAgICAgICAgICAgcmVuZGVyKCI8bGkgY2xhc3M9M0Qnc2VsZWN0Mi1zZWxlY3Rpb24t bGltaXQnPiIgKyBldmFsPQp1YXRlKG9wdHMuZm9ybWF0U2VsZWN0aW9uVG9vQmlnLCBvcHRzLmVs ZW1lbnQsIG1heFNlbFNpemUpICsgIjwvbGk+Iik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy bjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Cj0yMAogICAgICAgICAgICAgaWYg KHNlYXJjaC52YWwoKS5sZW5ndGggPCBvcHRzLm1pbmltdW1JbnB1dExlbmd0aCkgewogICAgICAg ICAgICAgICAgIGlmIChjaGVja0Zvcm1hdHRlcihvcHRzLmZvcm1hdElucHV0VG9vU2hvcnQsICJm b3JtYXRJbnB1dFQ9Cm9vU2hvcnQiKSkgewotICAgICAgICAgICAgICAgICAgICByZW5kZXIoIjxs aSBjbGFzcz0zRCdzZWxlY3QyLW5vLXJlc3VsdHMnPiIgKyBvcHRzLmZvcm09CmF0SW5wdXRUb29T aG9ydChzZWFyY2gudmFsKCksIG9wdHMubWluaW11bUlucHV0TGVuZ3RoKSArICI8L2xpPiIpOwor ICAgICAgICAgICAgICAgICAgICByZW5kZXIoIjxsaSBjbGFzcz0zRCdzZWxlY3QyLW5vLXJlc3Vs dHMnPiIgKyBldmFsdWF0ZSg9Cm9wdHMuZm9ybWF0SW5wdXRUb29TaG9ydCwgb3B0cy5lbGVtZW50 LCBzZWFyY2gudmFsKCksIG9wdHMubWluaW11bUlucHV0TGVuZz0KdGgpICsgIjwvbGk+Iik7CiAg ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgcmVuZGVyKCIiKTsK ICAgICAgICAgICAgICAgICB9CkBAIC0xNTc4LDcgKzE3MzMsNyBAQAo9MjAKICAgICAgICAgICAg IGlmIChvcHRzLm1heGltdW1JbnB1dExlbmd0aCAmJiBzZWFyY2gudmFsKCkubGVuZ3RoID4gb3B0 cy5tYXhpPQptdW1JbnB1dExlbmd0aCkgewogICAgICAgICAgICAgICAgIGlmIChjaGVja0Zvcm1h dHRlcihvcHRzLmZvcm1hdElucHV0VG9vTG9uZywgImZvcm1hdElucHV0VG89Cm9Mb25nIikpIHsK LSAgICAgICAgICAgICAgICAgICAgcmVuZGVyKCI8bGkgY2xhc3M9M0Qnc2VsZWN0Mi1uby1yZXN1 bHRzJz4iICsgb3B0cy5mb3JtPQphdElucHV0VG9vTG9uZyhzZWFyY2gudmFsKCksIG9wdHMubWF4 aW11bUlucHV0TGVuZ3RoKSArICI8L2xpPiIpOworICAgICAgICAgICAgICAgICAgICByZW5kZXIo IjxsaSBjbGFzcz0zRCdzZWxlY3QyLW5vLXJlc3VsdHMnPiIgKyBldmFsdWF0ZSg9Cm9wdHMuZm9y bWF0SW5wdXRUb29Mb25nLCBvcHRzLmVsZW1lbnQsIHNlYXJjaC52YWwoKSwgb3B0cy5tYXhpbXVt SW5wdXRMZW5ndD0KaCkgKyAiPC9saT4iKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg ICAgICAgICAgICAgICAgICByZW5kZXIoIiIpOwogICAgICAgICAgICAgICAgIH0KQEAgLTE1ODYs NyArMTc0MSw3IEBACiAgICAgICAgICAgICB9Cj0yMAogICAgICAgICAgICAgaWYgKG9wdHMuZm9y bWF0U2VhcmNoaW5nICYmIHRoaXMuZmluZEhpZ2hsaWdodGFibGVDaG9pY2VzKCkubGU9Cm5ndGgg PTNEPTNEPTNEIDApIHsKLSAgICAgICAgICAgICAgICByZW5kZXIoIjxsaSBjbGFzcz0zRCdzZWxl Y3QyLXNlYXJjaGluZyc+IiArIG9wdHMuZm9ybWF0U2VhPQpyY2hpbmcoKSArICI8L2xpPiIpOwor ICAgICAgICAgICAgICAgIHJlbmRlcigiPGxpIGNsYXNzPTNEJ3NlbGVjdDItc2VhcmNoaW5nJz4i ICsgZXZhbHVhdGUob3B0cy49CmZvcm1hdFNlYXJjaGluZywgb3B0cy5lbGVtZW50KSArICI8L2xp PiIpOwogICAgICAgICAgICAgfQo9MjAKICAgICAgICAgICAgIHNlYXJjaC5hZGRDbGFzcygic2Vs ZWN0Mi1hY3RpdmUiKTsKQEAgLTE2MjEsNiArMTc3NiwxMiBAQAogICAgICAgICAgICAgICAgICAg ICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQo9MjAKKyAgICAgICAgICAgICAgICAvLyBoYW5k bGUgYWpheCBlcnJvcgorICAgICAgICAgICAgICAgIGlmKGRhdGEuaGFzRXJyb3IgIT0zRD0zRCB1 bmRlZmluZWQgJiYgY2hlY2tGb3JtYXR0ZXIob3B0cy49CmZvcm1hdEFqYXhFcnJvciwgImZvcm1h dEFqYXhFcnJvciIpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcigiPGxpIGNsYXNzPTNE J3NlbGVjdDItYWpheC1lcnJvcic+IiArIGV2YWx1YXRlKD0Kb3B0cy5mb3JtYXRBamF4RXJyb3Is IG9wdHMuZWxlbWVudCwgZGF0YS5qcVhIUiwgZGF0YS50ZXh0U3RhdHVzLCBkYXRhLmVycm9yPQpU aHJvd24pICsgIjwvbGk+Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg ICAgICAgICB9CisKICAgICAgICAgICAgICAgICAvLyBzYXZlIGNvbnRleHQsIGlmIGFueQogICAg ICAgICAgICAgICAgIHRoaXMuY29udGV4dCA9M0QgKGRhdGEuY29udGV4dD0zRD0zRD0zRHVuZGVm aW5lZCkgPyBudWxsIDo9CiBkYXRhLmNvbnRleHQ7CiAgICAgICAgICAgICAgICAgLy8gY3JlYXRl IGEgZGVmYXVsdCBjaG9pY2UgYW5kIHByZXBlbmQgaXQgdG8gdGhlIGxpc3QKQEAgLTE2MzEsMTMg KzE3OTIsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcXVhbChzZWxmLmlkKHRoaXMp LCBzZWxmLmlkKGRlZikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmxlbmd0aCA9 M0Q9M0Q9M0QgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucmVzdWx0cy51 bnNoaWZ0KGRlZik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRzLmNyZWF0 ZVNlYXJjaENob2ljZVBvc2l0aW9uKGRhdGEucmVzdT0KbHRzLCBkZWYpOwogICAgICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQo9 MjAKICAgICAgICAgICAgICAgICBpZiAoZGF0YS5yZXN1bHRzLmxlbmd0aCA9M0Q9M0Q9M0QgMCAm JiBjaGVja0Zvcm1hdHRlcihvcHRzPQouZm9ybWF0Tm9NYXRjaGVzLCAiZm9ybWF0Tm9NYXRjaGVz IikpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVuZGVyKCI8bGkgY2xhc3M9M0Qnc2VsZWN0Mi1u by1yZXN1bHRzJz4iICsgb3B0cy5mb3JtPQphdE5vTWF0Y2hlcyhzZWFyY2gudmFsKCkpICsgIjwv bGk+Iik7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcigiPGxpIGNsYXNzPTNEJ3NlbGVjdDIt bm8tcmVzdWx0cyc+IiArIGV2YWx1YXRlKD0Kb3B0cy5mb3JtYXROb01hdGNoZXMsIG9wdHMuZWxl bWVudCwgc2VhcmNoLnZhbCgpKSArICI8L2xpPiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1 cm47CiAgICAgICAgICAgICAgICAgfQo9MjAKQEAgLTE2NDUsNyArMTgwNiw3IEBACiAgICAgICAg ICAgICAgICAgc2VsZi5vcHRzLnBvcHVsYXRlUmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdHMsIGRh dGEucmVzdWx0cz0KLCB7dGVybTogc2VhcmNoLnZhbCgpLCBwYWdlOiB0aGlzLnJlc3VsdHNQYWdl LCBjb250ZXh0Om51bGx9KTsKPTIwCiAgICAgICAgICAgICAgICAgaWYgKGRhdGEubW9yZSA9M0Q9 M0Q9M0QgdHJ1ZSAmJiBjaGVja0Zvcm1hdHRlcihvcHRzLmZvcm1hdD0KTG9hZE1vcmUsICJmb3Jt YXRMb2FkTW9yZSIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKCI8bGkg Y2xhc3M9M0Qnc2VsZWN0Mi1tb3JlLXJlc3VsdHMnPiIgKz0KIHNlbGYub3B0cy5lc2NhcGVNYXJr dXAob3B0cy5mb3JtYXRMb2FkTW9yZSh0aGlzLnJlc3VsdHNQYWdlKSkgKyAiPC9saT4iKTsKKyAg ICAgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoIjxsaSBjbGFzcz0zRCdzZWxlY3QyLW1v cmUtcmVzdWx0cyc+IiArPQogb3B0cy5lc2NhcGVNYXJrdXAoZXZhbHVhdGUob3B0cy5mb3JtYXRM b2FkTW9yZSwgb3B0cy5lbGVtZW50LCB0aGlzLnJlc3VsdHM9ClBhZ2UpKSArICI8L2xpPiIpOwog ICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsgc2VsZi5s b2FkTW9yZUlmTmVlZGVkKCk9CjsgfSwgMTApOwogICAgICAgICAgICAgICAgIH0KPTIwCkBAIC0x NjgzLDYgKzE4NDQsMTAgQEAKPTIwCiAgICAgICAgIC8vIGFic3RyYWN0CiAgICAgICAgIHNlbGVj dEhpZ2hsaWdodGVkOiBmdW5jdGlvbiAob3B0aW9ucykgeworICAgICAgICAgICAgaWYgKHRoaXMu X3RvdWNoTW92ZWQpIHsKKyAgICAgICAgICAgICAgdGhpcy5jbGVhclRvdWNoTW92ZWQoKTsKKyAg ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAgICAgICAgICAgdmFyIGluZGV4 PTNEdGhpcy5oaWdobGlnaHQoKSwKICAgICAgICAgICAgICAgICBoaWdobGlnaHRlZD0zRHRoaXMu cmVzdWx0cy5maW5kKCIuc2VsZWN0Mi1oaWdobGlnaHRlZCIpLAogICAgICAgICAgICAgICAgIGRh dGEgPTNEIGhpZ2hsaWdodGVkLmNsb3Nlc3QoJy5zZWxlY3QyLXJlc3VsdCcpLmRhdGEoInNlbGU9 CmN0Mi1kYXRhIik7CkBAIC0xNzA4LDEyICsxODczLDEyIEBACiAgICAgICAgIC8vIGFic3RyYWN0 CiAgICAgICAgIGdldFBsYWNlaG9sZGVyT3B0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAg IGlmICh0aGlzLnNlbGVjdCkgewotICAgICAgICAgICAgICAgIHZhciBmaXJzdE9wdGlvbiA9M0Qg dGhpcy5zZWxlY3QuY2hpbGRyZW4oKS5maXJzdCgpOworICAgICAgICAgICAgICAgIHZhciBmaXJz dE9wdGlvbiA9M0QgdGhpcy5zZWxlY3QuY2hpbGRyZW4oJ29wdGlvbicpLmZpcnN0KCk7CiAgICAg ICAgICAgICAgICAgaWYgKHRoaXMub3B0cy5wbGFjZWhvbGRlck9wdGlvbiAhPTNEPTNEIHVuZGVm aW5lZCApIHsKICAgICAgICAgICAgICAgICAgICAgLy9EZXRlcm1pbmUgdGhlIHBsYWNlaG9sZGVy IG9wdGlvbiBiYXNlZCBvbiB0aGUgc3BlY2lmPQppZWQgcGxhY2Vob2xkZXJPcHRpb24gc2V0dGlu ZwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMub3B0cy5wbGFjZWhvbGRlck9wdGlv biA9M0Q9M0Q9M0QgImZpcnN0IiA9CiYmIGZpcnN0T3B0aW9uKSB8fAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHR5cGVvZiB0aGlzLm9wdHMucGxhY2Vob2xkZXJPcHRpb24gPTNEPTNEPTNE ICI9CmZ1bmN0aW9uIiAmJiB0aGlzLm9wdHMucGxhY2Vob2xkZXJPcHRpb24odGhpcy5zZWxlY3Qp KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpcnN0T3B0aW9uLnRleHQoKSA9M0Q9M0Q9 M0QgIiIgJiYgZmlyc3RPcHRpb24uPQp2YWwoKSA9M0Q9M0Q9M0QgIiIpIHsKKyAgICAgICAgICAg ICAgICB9IGVsc2UgaWYgKCQudHJpbShmaXJzdE9wdGlvbi50ZXh0KCkpID0zRD0zRD0zRCAiIiAm JiBmaXJzPQp0T3B0aW9uLnZhbCgpID0zRD0zRD0zRCAiIikgewogICAgICAgICAgICAgICAgICAg ICAvL05vIGV4cGxpY2l0IHBsYWNlaG9sZGVyIG9wdGlvbiBzcGVjaWZpZWQsIHVzZSB0aGUgZmk9 CnJzdCBpZiBpdCdzIGJsYW5rCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdE9wdGlv bjsKICAgICAgICAgICAgICAgICB9CkBAIC0xNzI5LDcgKzE4OTQsNyBAQAogICAgICAgICAvLyBh YnN0cmFjdAogICAgICAgICBpbml0Q29udGFpbmVyV2lkdGg6IGZ1bmN0aW9uICgpIHsKICAgICAg ICAgICAgIGZ1bmN0aW9uIHJlc29sdmVDb250YWluZXJXaWR0aCgpIHsKLSAgICAgICAgICAgICAg ICB2YXIgc3R5bGUsIGF0dHJzLCBtYXRjaGVzLCBpLCBsOworICAgICAgICAgICAgICAgIHZhciBz dHlsZSwgYXR0cnMsIG1hdGNoZXMsIGksIGwsIGF0dHI7Cj0yMAogICAgICAgICAgICAgICAgIGlm ICh0aGlzLm9wdHMud2lkdGggPTNEPTNEPTNEICJvZmYiKSB7CiAgICAgICAgICAgICAgICAgICAg IHJldHVybiBudWxsOwpAQCAtMTc0MSw4ICsxOTA2LDggQEAKICAgICAgICAgICAgICAgICAgICAg aWYgKHN0eWxlICE9M0Q9M0QgdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBh dHRycyA9M0Qgc3R5bGUuc3BsaXQoJzsnKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo aSA9M0QgMCwgbCA9M0QgYXR0cnMubGVuZ3RoOyBpIDwgbDsgaSA9M0QgaSArPQogMSkgewotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPTNEIGF0dHJzW2ldLnJlcGxhY2UoL1xz L2csICcnKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWF0Y2goL1teLV13aWR0 aDooKFstK10/KFswLTldKlwuKT9bMC05XSs9CikocHh8ZW18ZXh8JXxpbnxjbXxtbXxwdHxwYykp L2kpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIgPTNEIGF0dHJzW2ldLnJlcGxh Y2UoL1xzL2csICcnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzID0zRCBh dHRyLm1hdGNoKC9ed2lkdGg6KChbLStdPyhbMC05XSpcPQouKT9bMC05XSspKHB4fGVtfGV4fCV8 aW58Y218bW18cHR8cGMpKS9pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0 Y2hlcyAhPTNEPTNEIG51bGwgJiYgbWF0Y2hlcy5sZW5ndGggPj0KPTNEIDEpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzWzFdOwogICAgICAgICAgICAgICAg ICAgICAgICAgfQpAQCAtMTc4MSwxNiArMTk0NiwxOSBAQAogICAgICAgICAgICAgdmFyIGNvbnRh aW5lciA9M0QgJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuYXR0cih7CiAgICAgICAg ICAgICAgICAgImNsYXNzIjogInNlbGVjdDItY29udGFpbmVyIgogICAgICAgICAgICAgfSkuaHRt bChbCi0gICAgICAgICAgICAgICAgIjxhIGhyZWY9M0QnamF2YXNjcmlwdDp2b2lkKDApJyBvbmNs aWNrPTNEJ3JldHVybiBmYWxzZTsnID0KY2xhc3M9M0Qnc2VsZWN0Mi1jaG9pY2UnIHRhYmluZGV4 PTNEJy0xJz4iLAotICAgICAgICAgICAgICAgICIgICA8c3BhbiBjbGFzcz0zRCdzZWxlY3QyLWNo b3Nlbic+Jm5ic3A7PC9zcGFuPjxhYmJyIGNsYXM9CnM9M0Qnc2VsZWN0Mi1zZWFyY2gtY2hvaWNl LWNsb3NlJz48L2FiYnI+IiwKLSAgICAgICAgICAgICAgICAiICAgPHNwYW4gY2xhc3M9M0Qnc2Vs ZWN0Mi1hcnJvdyc+PGI+PC9iPjwvc3Bhbj4iLAorICAgICAgICAgICAgICAgICI8YSBocmVmPTNE J2phdmFzY3JpcHQ6dm9pZCgwKScgY2xhc3M9M0Qnc2VsZWN0Mi1jaG9pY2UnIHQ9CmFiaW5kZXg9 M0QnLTEnPiIsCisgICAgICAgICAgICAgICAgIiAgIDxzcGFuIGNsYXNzPTNEJ3NlbGVjdDItY2hv c2VuJz4mIzE2MDs8L3NwYW4+PGFiYnIgY2xhcz0Kcz0zRCdzZWxlY3QyLXNlYXJjaC1jaG9pY2Ut Y2xvc2UnPjwvYWJicj4iLAorICAgICAgICAgICAgICAgICIgICA8c3BhbiBjbGFzcz0zRCdzZWxl Y3QyLWFycm93JyByb2xlPTNEJ3ByZXNlbnRhdGlvbic+PGI9CiByb2xlPTNEJ3ByZXNlbnRhdGlv bic+PC9iPjwvc3Bhbj4iLAogICAgICAgICAgICAgICAgICI8L2E+IiwKLSAgICAgICAgICAgICAg ICAiPGlucHV0IGNsYXNzPTNEJ3NlbGVjdDItZm9jdXNzZXIgc2VsZWN0Mi1vZmZzY3JlZW4nIHR5 cGU9Cj0zRCd0ZXh0Jy8+IiwKKyAgICAgICAgICAgICAgICAiPGxhYmVsIGZvcj0zRCcnIGNsYXNz PTNEJ3NlbGVjdDItb2Zmc2NyZWVuJz48L2xhYmVsPiIsCisgICAgICAgICAgICAgICAgIjxpbnB1 dCBjbGFzcz0zRCdzZWxlY3QyLWZvY3Vzc2VyIHNlbGVjdDItb2Zmc2NyZWVuJyB0eXBlPQo9M0Qn dGV4dCcgYXJpYS1oYXNwb3B1cD0zRCd0cnVlJyByb2xlPTNEJ2J1dHRvbicgLz4iLAogICAgICAg ICAgICAgICAgICI8ZGl2IGNsYXNzPTNEJ3NlbGVjdDItZHJvcCBzZWxlY3QyLWRpc3BsYXktbm9u ZSc+IiwKICAgICAgICAgICAgICAgICAiICAgPGRpdiBjbGFzcz0zRCdzZWxlY3QyLXNlYXJjaCc+ IiwKLSAgICAgICAgICAgICAgICAiICAgICAgIDxpbnB1dCB0eXBlPTNEJ3RleHQnIGF1dG9jb21w bGV0ZT0zRCdvZmYnIGF1dG9jb3JyPQplY3Q9M0Qnb2ZmJyBhdXRvY2FwaXRhbGl6ZT0zRCdvZmYn IHNwZWxsY2hlY2s9M0QnZmFsc2UnIGNsYXNzPTNEJ3NlbGVjdDItaW49CnB1dCcvPiIsCisgICAg ICAgICAgICAgICAgIiAgICAgICA8bGFiZWwgZm9yPTNEJycgY2xhc3M9M0Qnc2VsZWN0Mi1vZmZz Y3JlZW4nPjwvbGFiZT0KbD4iLAorICAgICAgICAgICAgICAgICIgICAgICAgPGlucHV0IHR5cGU9 M0QndGV4dCcgYXV0b2NvbXBsZXRlPTNEJ29mZicgYXV0b2NvcnI9CmVjdD0zRCdvZmYnIGF1dG9j YXBpdGFsaXplPTNEJ29mZicgc3BlbGxjaGVjaz0zRCdmYWxzZScgY2xhc3M9M0Qnc2VsZWN0Mi1p bj0KcHV0JyByb2xlPTNEJ2NvbWJvYm94JyBhcmlhLWV4cGFuZGVkPTNEJ3RydWUnIiwKKyAgICAg ICAgICAgICAgICAiICAgICAgIGFyaWEtYXV0b2NvbXBsZXRlPTNEJ2xpc3QnIC8+IiwKICAgICAg ICAgICAgICAgICAiICAgPC9kaXY+IiwKLSAgICAgICAgICAgICAgICAiICAgPHVsIGNsYXNzPTNE J3NlbGVjdDItcmVzdWx0cyc+IiwKKyAgICAgICAgICAgICAgICAiICAgPHVsIGNsYXNzPTNEJ3Nl bGVjdDItcmVzdWx0cycgcm9sZT0zRCdsaXN0Ym94Jz4iLAogICAgICAgICAgICAgICAgICIgICA8 L3VsPiIsCiAgICAgICAgICAgICAgICAgIjwvZGl2PiJdLmpvaW4oIiIpKTsKICAgICAgICAgICAg IHJldHVybiBjb250YWluZXI7CkBAIC0xODE5LDE3ICsxOTg3LDE5IEBACj0yMAogICAgICAgICAg ICAgICAgIHRoaXMuc2VhcmNoLnZhbCh0aGlzLmZvY3Vzc2VyLnZhbCgpKTsKICAgICAgICAgICAg IH0KLSAgICAgICAgICAgIHRoaXMuc2VhcmNoLmZvY3VzKCk7Ci0gICAgICAgICAgICAvLyBtb3Zl IHRoZSBjdXJzb3IgdG8gdGhlIGVuZCBhZnRlciBmb2N1c3NpbmcsIG90aGVyd2lzZSBpdCB3aT0K bGwgYmUgYXQgdGhlIGJlZ2lubmluZyBhbmQKLSAgICAgICAgICAgIC8vIG5ldyB0ZXh0IHdpbGwg YXBwZWFyICpiZWZvcmUqIGZvY3Vzc2VyLnZhbCgpCi0gICAgICAgICAgICBlbCA9M0QgdGhpcy5z ZWFyY2guZ2V0KDApOwotICAgICAgICAgICAgaWYgKGVsLmNyZWF0ZVRleHRSYW5nZSkgewotICAg ICAgICAgICAgICAgIHJhbmdlID0zRCBlbC5jcmVhdGVUZXh0UmFuZ2UoKTsKLSAgICAgICAgICAg ICAgICByYW5nZS5jb2xsYXBzZShmYWxzZSk7Ci0gICAgICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0 KCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGVsLnNldFNlbGVjdGlvblJhbmdlKSB7Ci0gICAg ICAgICAgICAgICAgbGVuID0zRCB0aGlzLnNlYXJjaC52YWwoKS5sZW5ndGg7Ci0gICAgICAgICAg ICAgICAgZWwuc2V0U2VsZWN0aW9uUmFuZ2UobGVuLCBsZW4pOworICAgICAgICAgICAgaWYgKHRo aXMub3B0cy5zaG91bGRGb2N1c0lucHV0KHRoaXMpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5z ZWFyY2guZm9jdXMoKTsKKyAgICAgICAgICAgICAgICAvLyBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhl IGVuZCBhZnRlciBmb2N1c3NpbmcsIG90aGVyd2lzZSBpPQp0IHdpbGwgYmUgYXQgdGhlIGJlZ2lu bmluZyBhbmQKKyAgICAgICAgICAgICAgICAvLyBuZXcgdGV4dCB3aWxsIGFwcGVhciAqYmVmb3Jl KiBmb2N1c3Nlci52YWwoKQorICAgICAgICAgICAgICAgIGVsID0zRCB0aGlzLnNlYXJjaC5nZXQo MCk7CisgICAgICAgICAgICAgICAgaWYgKGVsLmNyZWF0ZVRleHRSYW5nZSkgeworICAgICAgICAg ICAgICAgICAgICByYW5nZSA9M0QgZWwuY3JlYXRlVGV4dFJhbmdlKCk7CisgICAgICAgICAgICAg ICAgICAgIHJhbmdlLmNvbGxhcHNlKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2Uu c2VsZWN0KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbC5zZXRTZWxlY3Rpb25SYW5n ZSkgeworICAgICAgICAgICAgICAgICAgICBsZW4gPTNEIHRoaXMuc2VhcmNoLnZhbCgpLmxlbmd0 aDsKKyAgICAgICAgICAgICAgICAgICAgZWwuc2V0U2VsZWN0aW9uUmFuZ2UobGVuLCBsZW4pOwor ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KPTIwCiAgICAgICAgICAgICAvLyBpbml0 aWFsaXplcyBzZWFyY2gncyB2YWx1ZSB3aXRoIG5leHRTZWFyY2hUZXJtIChpZiBkZWZpbmVkID0K YnkgdXNlcikKQEAgLTE4NDcsMTQgKzIwMTcsMTMgQEAKICAgICAgICAgfSwKPTIwCiAgICAgICAg IC8vIHNpbmdsZQotICAgICAgICBjbG9zZTogZnVuY3Rpb24gKHBhcmFtcykgeworICAgICAgICBj bG9zZTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgaWYgKCF0aGlzLm9wZW5lZCgpKSByZXR1 cm47CiAgICAgICAgICAgICB0aGlzLnBhcmVudC5jbG9zZS5hcHBseSh0aGlzLCBhcmd1bWVudHMp Owo9MjAKLSAgICAgICAgICAgIHBhcmFtcyA9M0QgcGFyYW1zIHx8IHtmb2N1czogdHJ1ZX07Ci0g ICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLnJlbW92ZUF0dHIoImRpc2FibGVkIik7Ci0KLSAgICAg ICAgICAgIGlmIChwYXJhbXMuZm9jdXMpIHsKKyAgICAgICAgICAgIHRoaXMuZm9jdXNzZXIucHJv cCgiZGlzYWJsZWQiLCBmYWxzZSk7CisKKyAgICAgICAgICAgIGlmICh0aGlzLm9wdHMuc2hvdWxk Rm9jdXNJbnB1dCh0aGlzKSkgewogICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNzZXIuZm9jdXMo KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSwKQEAgLTE4NjQsOCArMjAzMywxMCBAQAogICAg ICAgICAgICAgaWYgKHRoaXMub3BlbmVkKCkpIHsKICAgICAgICAgICAgICAgICB0aGlzLmNsb3Nl KCk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNzZXIu cmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKLSAgICAgICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLmZv Y3VzKCk7CisgICAgICAgICAgICAgICAgdGhpcy5mb2N1c3Nlci5wcm9wKCJkaXNhYmxlZCIsIGZh bHNlKTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRzLnNob3VsZEZvY3VzSW5wdXQodGhp cykpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c3Nlci5mb2N1cygpOworICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSwKPTIwCkBAIC0xODc3LDggKzIw NDgsMTEgQEAKICAgICAgICAgLy8gc2luZ2xlCiAgICAgICAgIGNhbmNlbDogZnVuY3Rpb24gKCkg ewogICAgICAgICAgICAgdGhpcy5wYXJlbnQuY2FuY2VsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7 Ci0gICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLnJlbW92ZUF0dHIoImRpc2FibGVkIik7Ci0gICAg ICAgICAgICB0aGlzLmZvY3Vzc2VyLmZvY3VzKCk7CisgICAgICAgICAgICB0aGlzLmZvY3Vzc2Vy LnByb3AoImRpc2FibGVkIiwgZmFsc2UpOworCisgICAgICAgICAgICBpZiAodGhpcy5vcHRzLnNo b3VsZEZvY3VzSW5wdXQodGhpcykpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLmZv Y3VzKCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0sCj0yMAogICAgICAgICAvLyBzaW5nbGUK QEAgLTE4ODYsNiArMjA2MCwxMSBAQAogICAgICAgICAgICAgJCgibGFiZWxbZm9yPTNEJyIgKyB0 aGlzLmZvY3Vzc2VyLmF0dHIoJ2lkJykgKyAiJ10iKQogICAgICAgICAgICAgICAgIC5hdHRyKCdm b3InLCB0aGlzLm9wdHMuZWxlbWVudC5hdHRyKCJpZCIpKTsKICAgICAgICAgICAgIHRoaXMucGFy ZW50LmRlc3Ryb3kuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKworICAgICAgICAgICAgY2xlYW51 cEpRdWVyeUVsZW1lbnRzLmNhbGwodGhpcywKKyAgICAgICAgICAgICAgICAic2VsZWN0aW9uIiwK KyAgICAgICAgICAgICAgICAiZm9jdXNzZXIiCisgICAgICAgICAgICApOwogICAgICAgICB9LAo9 MjAKICAgICAgICAgLy8gc2luZ2xlCkBAIC0xODkzLDcgKzIwNzIsOSBAQAo9MjAKICAgICAgICAg ICAgIHZhciBzZWxlY3Rpb24sCiAgICAgICAgICAgICAgICAgY29udGFpbmVyID0zRCB0aGlzLmNv bnRhaW5lciwKLSAgICAgICAgICAgICAgICBkcm9wZG93biA9M0QgdGhpcy5kcm9wZG93bjsKKyAg ICAgICAgICAgICAgICBkcm9wZG93biA9M0QgdGhpcy5kcm9wZG93biwKKyAgICAgICAgICAgICAg ICBpZFN1ZmZpeCA9M0QgbmV4dFVpZCgpLAorICAgICAgICAgICAgICAgIGVsZW1lbnRMYWJlbDsK PTIwCiAgICAgICAgICAgICBpZiAodGhpcy5vcHRzLm1pbmltdW1SZXN1bHRzRm9yU2VhcmNoIDwg MCkgewogICAgICAgICAgICAgICAgIHRoaXMuc2hvd1NlYXJjaChmYWxzZSk7CkBAIC0xOTA1LDE3 ICsyMDg2LDQwIEBACj0yMAogICAgICAgICAgICAgdGhpcy5mb2N1c3NlciA9M0QgY29udGFpbmVy LmZpbmQoIi5zZWxlY3QyLWZvY3Vzc2VyIik7Cj0yMAorICAgICAgICAgICAgLy8gYWRkIGFyaWEg YXNzb2NpYXRpb25zCisgICAgICAgICAgICBzZWxlY3Rpb24uZmluZCgiLnNlbGVjdDItY2hvc2Vu IikuYXR0cigiaWQiLCAic2VsZWN0Mi1jaG9zZW4tIj0KK2lkU3VmZml4KTsKKyAgICAgICAgICAg IHRoaXMuZm9jdXNzZXIuYXR0cigiYXJpYS1sYWJlbGxlZGJ5IiwgInNlbGVjdDItY2hvc2VuLSIr aWRTdWZmPQppeCk7CisgICAgICAgICAgICB0aGlzLnJlc3VsdHMuYXR0cigiaWQiLCAic2VsZWN0 Mi1yZXN1bHRzLSIraWRTdWZmaXgpOworICAgICAgICAgICAgdGhpcy5zZWFyY2guYXR0cigiYXJp YS1vd25zIiwgInNlbGVjdDItcmVzdWx0cy0iK2lkU3VmZml4KTsKKwogICAgICAgICAgICAgLy8g cmV3cml0ZSBsYWJlbHMgZnJvbSBvcmlnaW5hbCBlbGVtZW50IHRvIGZvY3Vzc2VyCi0gICAgICAg ICAgICB0aGlzLmZvY3Vzc2VyLmF0dHIoImlkIiwgInMyaWRfYXV0b2dlbiIrbmV4dFVpZCgpKTsK LQotICAgICAgICAgICAgJCgibGFiZWxbZm9yPTNEJyIgKyB0aGlzLm9wdHMuZWxlbWVudC5hdHRy KCJpZCIpICsgIiddIikKKyAgICAgICAgICAgIHRoaXMuZm9jdXNzZXIuYXR0cigiaWQiLCAiczJp ZF9hdXRvZ2VuIitpZFN1ZmZpeCk7CisKKyAgICAgICAgICAgIGVsZW1lbnRMYWJlbCA9M0QgJCgi bGFiZWxbZm9yPTNEJyIgKyB0aGlzLm9wdHMuZWxlbWVudC5hdHRyKCJpPQpkIikgKyAiJ10iKTsK KworICAgICAgICAgICAgdGhpcy5mb2N1c3Nlci5wcmV2KCkKKyAgICAgICAgICAgICAgICAudGV4 dChlbGVtZW50TGFiZWwudGV4dCgpKQogICAgICAgICAgICAgICAgIC5hdHRyKCdmb3InLCB0aGlz LmZvY3Vzc2VyLmF0dHIoJ2lkJykpOwo9MjAKKyAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgb3Jp Z2luYWwgZWxlbWVudCByZXRhaW5zIGFuIGFjY2Vzc2libGUgbmFtZQorICAgICAgICAgICAgdmFy IG9yaWdpbmFsVGl0bGUgPTNEIHRoaXMub3B0cy5lbGVtZW50LmF0dHIoInRpdGxlIik7CisgICAg ICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC5hdHRyKCJ0aXRsZSIsIChvcmlnaW5hbFRpdGxlIHx8 IGVsZW1lbnRMYWJlbD0KLnRleHQoKSkpOworCiAgICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLmF0 dHIoInRhYmluZGV4IiwgdGhpcy5lbGVtZW50VGFiSW5kZXgpOwo9MjAKKyAgICAgICAgICAgIC8v IHdyaXRlIGxhYmVsIGZvciBzZWFyY2ggZmllbGQgdXNpbmcgdGhlIGxhYmVsIGZyb20gdGhlIGZv Y3VzPQpzZXIgZWxlbWVudAorICAgICAgICAgICAgdGhpcy5zZWFyY2guYXR0cigiaWQiLCB0aGlz LmZvY3Vzc2VyLmF0dHIoJ2lkJykgKyAnX3NlYXJjaCcpOworCisgICAgICAgICAgICB0aGlzLnNl YXJjaC5wcmV2KCkKKyAgICAgICAgICAgICAgICAudGV4dCgkKCJsYWJlbFtmb3I9M0QnIiArIHRo aXMuZm9jdXNzZXIuYXR0cignaWQnKSArICInXSIpPQoudGV4dCgpKQorICAgICAgICAgICAgICAg IC5hdHRyKCdmb3InLCB0aGlzLnNlYXJjaC5hdHRyKCdpZCcpKTsKKwogICAgICAgICAgICAgdGhp cy5zZWFyY2gub24oImtleWRvd24iLCB0aGlzLmJpbmQoZnVuY3Rpb24gKGUpIHsKICAgICAgICAg ICAgICAgICBpZiAoIXRoaXMuaXNJbnRlcmZhY2VFbmFibGVkKCkpIHJldHVybjsKPTIwCisgICAg ICAgICAgICAgICAgLy8gZmlsdGVyIDIyOSBrZXlDb2RlcyAoaW5wdXQgbWV0aG9kIGVkaXRvciBp cyBwcm9jZXNzaW5nID0Ka2V5IGlucHV0KQorICAgICAgICAgICAgICAgIGlmICgyMjkgPTNEPTNE IGUua2V5Q29kZSkgcmV0dXJuOworCiAgICAgICAgICAgICAgICAgaWYgKGUud2hpY2ggPTNEPTNE PTNEIEtFWS5QQUdFX1VQIHx8IGUud2hpY2ggPTNEPTNEPTNEIEtFWT0KLlBBR0VfRE9XTikgewog ICAgICAgICAgICAgICAgICAgICAvLyBwcmV2ZW50IHRoZSBwYWdlIGZyb20gc2Nyb2xsaW5nCiAg ICAgICAgICAgICAgICAgICAgIGtpbGxFdmVudChlKTsKQEAgLTE5NDUsOSArMjE0OSwxMSBAQAog ICAgICAgICAgICAgdGhpcy5zZWFyY2gub24oImJsdXIiLCB0aGlzLmJpbmQoZnVuY3Rpb24oZSkg ewogICAgICAgICAgICAgICAgIC8vIGEgd29ya2Fyb3VuZCBmb3IgY2hyb21lIHRvIGtlZXAgdGhl IHNlYXJjaCBmaWVsZCBmb2N1c3M9CmVkIHdoZW4gdGhlIHNjcm9sbCBiYXIgaXMgdXNlZCB0byBz Y3JvbGwgdGhlIGRyb3Bkb3duLgogICAgICAgICAgICAgICAgIC8vIHdpdGhvdXQgdGhpcyB0aGUg c2VhcmNoIGZpZWxkIGxvc2VzIGZvY3VzIHdoaWNoIGlzIGFubm89CnlpbmcKLSAgICAgICAgICAg ICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9M0Q9M0Q9M0QgdGhpcy5ib2R5KCkuZ2V0 KDApKSB7CisgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPTNEPTNE PTNEIHRoaXMuYm9keS5nZXQoMCkpIHsKICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRp bWVvdXQodGhpcy5iaW5kKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhp cy5zZWFyY2guZm9jdXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wZW5l ZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2guZm9jdXMoKTsK KyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSksIDApOwog ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pKTsKQEAgLTE5OTMsNyArMjE5OSw3IEBA CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSkpOwo9MjAKLSAgICAgICAgICAgIHNl bGVjdGlvbi5vbigibW91c2Vkb3duIiwgImFiYnIiLCB0aGlzLmJpbmQoZnVuY3Rpb24gKGUpIHsK KyAgICAgICAgICAgIHNlbGVjdGlvbi5vbigibW91c2Vkb3duIHRvdWNoc3RhcnQiLCAiYWJiciIs IHRoaXMuYmluZChmdW5jdGlvPQpuIChlKSB7CiAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlz SW50ZXJmYWNlRW5hYmxlZCgpKSByZXR1cm47CiAgICAgICAgICAgICAgICAgdGhpcy5jbGVhcigp OwogICAgICAgICAgICAgICAgIGtpbGxFdmVudEltbWVkaWF0ZWx5KGUpOwpAQCAtMjAwMSw3ICsy MjA3LDkgQEAKICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5mb2N1cygpOwogICAgICAg ICAgICAgfSkpOwo9MjAKLSAgICAgICAgICAgIHNlbGVjdGlvbi5vbigibW91c2Vkb3duIiwgdGhp cy5iaW5kKGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICBzZWxlY3Rpb24ub24oIm1vdXNlZG93 biB0b3VjaHN0YXJ0IiwgdGhpcy5iaW5kKGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICAgICAg Ly8gUHJldmVudCBJRSBmcm9tIGdlbmVyYXRpbmcgYSBjbGljayBldmVudCBvbiB0aGUgYm9keQor ICAgICAgICAgICAgICAgIHJlaW5zZXJ0RWxlbWVudChzZWxlY3Rpb24pOwo9MjAKICAgICAgICAg ICAgICAgICBpZiAoIXRoaXMuY29udGFpbmVyLmhhc0NsYXNzKCJzZWxlY3QyLWNvbnRhaW5lci1h Y3RpdmUiKSkgewogICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC50cmlnZ2Vy KCQuRXZlbnQoInNlbGVjdDItZm9jdXMiKSk7CkBAIC0yMDE2LDcgKzIyMjQsMTEgQEAKICAgICAg ICAgICAgICAgICBraWxsRXZlbnQoZSk7CiAgICAgICAgICAgICB9KSk7Cj0yMAotICAgICAgICAg ICAgZHJvcGRvd24ub24oIm1vdXNlZG93biIsIHRoaXMuYmluZChmdW5jdGlvbigpIHsgdGhpcy5z ZWFyY2guZm89CmN1cygpOyB9KSk7CisgICAgICAgICAgICBkcm9wZG93bi5vbigibW91c2Vkb3du IHRvdWNoc3RhcnQiLCB0aGlzLmJpbmQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYg KHRoaXMub3B0cy5zaG91bGRGb2N1c0lucHV0KHRoaXMpKSB7CisgICAgICAgICAgICAgICAgICAg IHRoaXMuc2VhcmNoLmZvY3VzKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSkp Owo9MjAKICAgICAgICAgICAgIHNlbGVjdGlvbi5vbigiZm9jdXMiLCB0aGlzLmJpbmQoZnVuY3Rp b24oZSkgewogICAgICAgICAgICAgICAgIGtpbGxFdmVudChlKTsKQEAgLTIwODUsNiArMjI5Nyw3 IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZVNlbGVjdGlvbihzZWxlY3Rl ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCk7CiAgICAgICAgICAgICAg ICAgICAgICAgICBzZWxmLnNldFBsYWNlaG9sZGVyKCk7CisgICAgICAgICAgICAgICAgICAgICAg ICBzZWxmLm5leHRTZWFyY2hUZXJtID0zRCBzZWxmLm9wdHMubmV4dFNlYXJjaFRlcm0ocz0KZWxl Y3RlZCwgc2VsZi5zZWFyY2gudmFsKCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CkBAIC0yMDkyLDggKzIzMDUsOCBAQAo9MjAKICAg ICAgICAgaXNQbGFjZWhvbGRlck9wdGlvblNlbGVjdGVkOiBmdW5jdGlvbigpIHsKICAgICAgICAg ICAgIHZhciBwbGFjZWhvbGRlck9wdGlvbjsKLSAgICAgICAgICAgIGlmICghdGhpcy5nZXRQbGFj ZWhvbGRlcigpKSByZXR1cm4gZmFsc2U7IC8vIG5vIHBsYWNlaG9sZGVyIHNwPQplY2lmaWVkIHNv IG5vIG9wdGlvbiBzaG91bGQgYmUgY29uc2lkZXJlZAotICAgICAgICAgICAgcmV0dXJuICgocGxh Y2Vob2xkZXJPcHRpb24gPTNEIHRoaXMuZ2V0UGxhY2Vob2xkZXJPcHRpb24oKSkgIT0KPTNEPTNE IHVuZGVmaW5lZCAmJiBwbGFjZWhvbGRlck9wdGlvbi5pcygnOnNlbGVjdGVkJykpCisgICAgICAg ICAgICBpZiAodGhpcy5nZXRQbGFjZWhvbGRlcigpID0zRD0zRD0zRCB1bmRlZmluZWQpIHJldHVy biBmYWxzZTsgLz0KLyBubyBwbGFjZWhvbGRlciBzcGVjaWZpZWQgc28gbm8gb3B0aW9uIHNob3Vs ZCBiZSBjb25zaWRlcmVkCisgICAgICAgICAgICByZXR1cm4gKChwbGFjZWhvbGRlck9wdGlvbiA9 M0QgdGhpcy5nZXRQbGFjZWhvbGRlck9wdGlvbigpKSAhPQo9M0Q9M0QgdW5kZWZpbmVkICYmIHBs YWNlaG9sZGVyT3B0aW9uLnByb3AoInNlbGVjdGVkIikpCiAgICAgICAgICAgICAgICAgfHwgKHRo aXMub3B0cy5lbGVtZW50LnZhbCgpID0zRD0zRD0zRCAiIikKICAgICAgICAgICAgICAgICB8fCAo dGhpcy5vcHRzLmVsZW1lbnQudmFsKCkgPTNEPTNEPTNEIHVuZGVmaW5lZCkKICAgICAgICAgICAg ICAgICB8fCAodGhpcy5vcHRzLmVsZW1lbnQudmFsKCkgPTNEPTNEPTNEIG51bGwpOwpAQCAtMjEw Nyw3ICsyMzIwLDcgQEAKICAgICAgICAgICAgIGlmIChvcHRzLmVsZW1lbnQuZ2V0KDApLnRhZ05h bWUudG9Mb3dlckNhc2UoKSA9M0Q9M0Q9M0QgInNlbGVjPQp0IikgewogICAgICAgICAgICAgICAg IC8vIGluc3RhbGwgdGhlIHNlbGVjdGlvbiBpbml0aWFsaXplcgogICAgICAgICAgICAgICAgIG9w dHMuaW5pdFNlbGVjdGlvbiA9M0QgZnVuY3Rpb24gKGVsZW1lbnQsIGNhbGxiYWNrKSB7Ci0gICAg ICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9M0QgZWxlbWVudC5maW5kKCI6c2VsZWN0ZWQi KTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0zRCBlbGVtZW50LmZpbmQoIm9w dGlvbiIpLmZpbHRlcihmdW5jdGlvPQpuKCkgeyByZXR1cm4gdGhpcy5zZWxlY3RlZCAmJiAhdGhp cy5kaXNhYmxlZCB9KTsKICAgICAgICAgICAgICAgICAgICAgLy8gYSBzaW5nbGUgc2VsZWN0IGJv eCBhbHdheXMgaGFzIGEgdmFsdWUsIG5vIG5lZWQgdG8gPQpudWxsIGNoZWNrICdzZWxlY3RlZCcK ICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soc2VsZi5vcHRpb25Ub0RhdGEoc2VsZWN0ZWQp KTsKICAgICAgICAgICAgICAgICB9OwpAQCAtMjIyNCwxMCArMjQzNywxMyBAQAogICAgICAgICAg ICAgdGhpcy5uZXh0U2VhcmNoVGVybSA9M0QgdGhpcy5vcHRzLm5leHRTZWFyY2hUZXJtKGRhdGEs IHRoaXMuc2U9CmFyY2gudmFsKCkpOwogICAgICAgICAgICAgdGhpcy5jbG9zZSgpOwo9MjAKLSAg ICAgICAgICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5ub0ZvY3VzKQorICAgICAgICAgICAg aWYgKCghb3B0aW9ucyB8fCAhb3B0aW9ucy5ub0ZvY3VzKSAmJiB0aGlzLm9wdHMuc2hvdWxkRm9j dXNJbnA9CnV0KHRoaXMpKSB7CiAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c3Nlci5mb2N1cygp OwotCi0gICAgICAgICAgICBpZiAoIWVxdWFsKG9sZCwgdGhpcy5pZChkYXRhKSkpIHsgdGhpcy50 cmlnZ2VyQ2hhbmdlKHthZGRlZDpkYT0KdGEscmVtb3ZlZDpvbGREYXRhfSk7IH0KKyAgICAgICAg ICAgIH0KKworICAgICAgICAgICAgaWYgKCFlcXVhbChvbGQsIHRoaXMuaWQoZGF0YSkpKSB7Cisg ICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyQ2hhbmdlKHsgYWRkZWQ6IGRhdGEsIHJlbW92ZWQ6 IG9sZERhdGEgfSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0sCj0yMAogICAgICAgICAvLyBz aW5nbGUKQEAgLTIyNzcsNyArMjQ5Myw3IEBACiAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Qp IHsKICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdAogICAgICAgICAgICAgICAgICAgICAudmFs KHZhbCkKLSAgICAgICAgICAgICAgICAgICAgLmZpbmQoIjpzZWxlY3RlZCIpLmVhY2gyKGZ1bmN0 aW9uIChpLCBlbG0pIHsKKyAgICAgICAgICAgICAgICAgICAgLmZpbmQoIm9wdGlvbiIpLmZpbHRl cihmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuc2VsZWN0PQplZCB9KS5lYWNoMihmdW5jdGlvbiAo aSwgZWxtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0zRCBzZWxmLm9wdGlvblRv RGF0YShlbG0pOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg ICAgICAgICAgICAgICB9KTsKQEAgLTIzNDksNiArMjU2NSw3IEBACiAgICAgICAgICAgICB9KS5o dG1sKFsKICAgICAgICAgICAgICAgICAiPHVsIGNsYXNzPTNEJ3NlbGVjdDItY2hvaWNlcyc+IiwK ICAgICAgICAgICAgICAgICAiICA8bGkgY2xhc3M9M0Qnc2VsZWN0Mi1zZWFyY2gtZmllbGQnPiIs CisgICAgICAgICAgICAgICAgIiAgICA8bGFiZWwgZm9yPTNEJycgY2xhc3M9M0Qnc2VsZWN0Mi1v ZmZzY3JlZW4nPjwvbGFiZWw+IiwKICAgICAgICAgICAgICAgICAiICAgIDxpbnB1dCB0eXBlPTNE J3RleHQnIGF1dG9jb21wbGV0ZT0zRCdvZmYnIGF1dG9jb3JyZWN0PQo9M0Qnb2ZmJyBhdXRvY2Fw aXRhbGl6ZT0zRCdvZmYnIHNwZWxsY2hlY2s9M0QnZmFsc2UnIGNsYXNzPTNEJ3NlbGVjdDItaW5w dXQ9Cic+IiwKICAgICAgICAgICAgICAgICAiICA8L2xpPiIsCiAgICAgICAgICAgICAgICAgIjwv dWw+IiwKQEAgLTIzNjcsMTIgKzI1ODQsMTIgQEAKICAgICAgICAgICAgIC8vIFRPRE8gdmFsaWRh dGUgcGxhY2Vob2xkZXIgaXMgYSBzdHJpbmcgaWYgc3BlY2lmaWVkCj0yMAogICAgICAgICAgICAg aWYgKG9wdHMuZWxlbWVudC5nZXQoMCkudGFnTmFtZS50b0xvd2VyQ2FzZSgpID0zRD0zRD0zRCAi c2VsZWM9CnQiKSB7Ci0gICAgICAgICAgICAgICAgLy8gaW5zdGFsbCBzdGhlIHNlbGVjdGlvbiBp bml0aWFsaXplcgorICAgICAgICAgICAgICAgIC8vIGluc3RhbGwgdGhlIHNlbGVjdGlvbiBpbml0 aWFsaXplcgogICAgICAgICAgICAgICAgIG9wdHMuaW5pdFNlbGVjdGlvbiA9M0QgZnVuY3Rpb24g KGVsZW1lbnQsIGNhbGxiYWNrKSB7Cj0yMAogICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9 M0QgW107Cj0yMAotICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmZpbmQoIjpzZWxlY3RlZCIp LmVhY2gyKGZ1bmN0aW9uIChpLCBlbG0pIHsKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5m aW5kKCJvcHRpb24iKS5maWx0ZXIoZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzPQouc2VsZWN0ZWQg JiYgIXRoaXMuZGlzYWJsZWQgfSkuZWFjaDIoZnVuY3Rpb24gKGksIGVsbSkgewogICAgICAgICAg ICAgICAgICAgICAgICAgZGF0YS5wdXNoKHNlbGYub3B0aW9uVG9EYXRhKGVsbSkpOwogICAgICAg ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZGF0YSk7CkBA IC0yNDE3LDYgKzI2MzQsNyBAQAogICAgICAgICAgICAgcmV0dXJuIG9wdHM7CiAgICAgICAgIH0s Cj0yMAorICAgICAgICAvLyBtdWx0aQogICAgICAgICBzZWxlY3RDaG9pY2U6IGZ1bmN0aW9uIChj aG9pY2UpIHsKPTIwCiAgICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPTNEIHRoaXMuY29udGFpbmVy LmZpbmQoIi5zZWxlY3QyLXNlYXJjaC1jaG9pY2UtZj0Kb2N1cyIpOwpAQCAtMjQ0MCw2ICsyNjU4 LDExIEBACiAgICAgICAgICAgICAkKCJsYWJlbFtmb3I9M0QnIiArIHRoaXMuc2VhcmNoLmF0dHIo J2lkJykgKyAiJ10iKQogICAgICAgICAgICAgICAgIC5hdHRyKCdmb3InLCB0aGlzLm9wdHMuZWxl bWVudC5hdHRyKCJpZCIpKTsKICAgICAgICAgICAgIHRoaXMucGFyZW50LmRlc3Ryb3kuYXBwbHko dGhpcywgYXJndW1lbnRzKTsKKworICAgICAgICAgICAgY2xlYW51cEpRdWVyeUVsZW1lbnRzLmNh bGwodGhpcywKKyAgICAgICAgICAgICAgICAic2VhcmNoQ29udGFpbmVyIiwKKyAgICAgICAgICAg ICAgICAic2VsZWN0aW9uIgorICAgICAgICAgICAgKTsKICAgICAgICAgfSwKPTIwCiAgICAgICAg IC8vIG11bHRpCkBAIC0yNDU5LDEwICsyNjgyLDEzIEBACj0yMAogICAgICAgICAgICAgLy8gcmV3 cml0ZSBsYWJlbHMgZnJvbSBvcmlnaW5hbCBlbGVtZW50IHRvIGZvY3Vzc2VyCiAgICAgICAgICAg ICB0aGlzLnNlYXJjaC5hdHRyKCJpZCIsICJzMmlkX2F1dG9nZW4iK25leHRVaWQoKSk7Ci0gICAg ICAgICAgICAkKCJsYWJlbFtmb3I9M0QnIiArIHRoaXMub3B0cy5lbGVtZW50LmF0dHIoImlkIikg KyAiJ10iKQorCisgICAgICAgICAgICB0aGlzLnNlYXJjaC5wcmV2KCkKKyAgICAgICAgICAgICAg ICAudGV4dCgkKCJsYWJlbFtmb3I9M0QnIiArIHRoaXMub3B0cy5lbGVtZW50LmF0dHIoImlkIikg KyAiPQonXSIpLnRleHQoKSkKICAgICAgICAgICAgICAgICAuYXR0cignZm9yJywgdGhpcy5zZWFy Y2guYXR0cignaWQnKSk7Cj0yMAogICAgICAgICAgICAgdGhpcy5zZWFyY2gub24oImlucHV0IHBh c3RlIiwgdGhpcy5iaW5kKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLnNl YXJjaC5hdHRyKCdwbGFjZWhvbGRlcicpICYmIHRoaXMuc2VhcmNoLnZhbCgpLmw9CmVuZ3RoID0z RD0zRCAwKSByZXR1cm47CiAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzSW50ZXJmYWNlRW5h YmxlZCgpKSByZXR1cm47CiAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wZW5lZCgpKSB7CiAg ICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbigpOwpAQCAtMjQ5MSwxMyArMjcxNywxNSBAQAog ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDaG9pY2UgPTNEIG5leHQubGVuZ3RoID8g bmV4dCA6IG51bGw7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg ZWxzZSBpZiAoZS53aGljaCA9M0Q9M0Q9M0QgS0VZLkJBQ0tTUEFDRSkgewotICAgICAgICAgICAg ICAgICAgICAgICAgdGhpcy51bnNlbGVjdChzZWxlY3RlZC5maXJzdCgpKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIHRoaXMuc2VhcmNoLndpZHRoKDEwKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgIHNlbGVjdGVkQ2hvaWNlID0zRCBwcmV2Lmxlbmd0aCA/IHByZXYgOiBuZXh0OworICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudW5zZWxlY3Qoc2VsZWN0ZWQuZmlyc3QoKSkpIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaC53aWR0aCgxMCk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDaG9pY2UgPTNEIHByZXYubGVuZ3RoID8g cHJldiA6IG5leHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg ICAgIH0gZWxzZSBpZiAoZS53aGljaCA9M0Q9M0QgS0VZLkRFTEVURSkgewotICAgICAgICAgICAg ICAgICAgICAgICAgdGhpcy51bnNlbGVjdChzZWxlY3RlZC5maXJzdCgpKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIHRoaXMuc2VhcmNoLndpZHRoKDEwKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgIHNlbGVjdGVkQ2hvaWNlID0zRCBuZXh0Lmxlbmd0aCA/IG5leHQgOiBudWxsOworICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudW5zZWxlY3Qoc2VsZWN0ZWQuZmlyc3QoKSkpIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaC53aWR0aCgxMCk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDaG9pY2UgPTNEIG5leHQubGVuZ3RoID8g bmV4dCA6IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg ICAgIH0gZWxzZSBpZiAoZS53aGljaCA9M0Q9M0QgS0VZLkVOVEVSKSB7CiAgICAgICAgICAgICAg ICAgICAgICAgICBzZWxlY3RlZENob2ljZSA9M0QgbnVsbDsKICAgICAgICAgICAgICAgICAgICAg fQpAQCAtMjY3NSw4ICsyOTAzLDE5IEBACj0yMAogICAgICAgICAgICAgdGhpcy5mb2N1c1NlYXJj aCgpOwo9MjAKKyAgICAgICAgICAgIC8vIGluaXRpYWxpemVzIHNlYXJjaCdzIHZhbHVlIHdpdGgg bmV4dFNlYXJjaFRlcm0gKGlmIGRlZmluZWQgPQpieSB1c2VyKQorICAgICAgICAgICAgLy8gaWdu b3JlIG5leHRTZWFyY2hUZXJtIGlmIHRoZSBkcm9wZG93biBpcyBvcGVuZWQgYnkgdGhlIHVzZXI9 CiBwcmVzc2luZyBhIGxldHRlcgorICAgICAgICAgICAgaWYodGhpcy5zZWFyY2gudmFsKCkgPTNE PTNEPTNEICIiKSB7CisgICAgICAgICAgICAgICAgaWYodGhpcy5uZXh0U2VhcmNoVGVybSAhPTNE IHVuZGVmaW5lZCl7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoLnZhbCh0aGlzLm5l eHRTZWFyY2hUZXJtKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2guc2VsZWN0KCk7 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICB0aGlzLnVw ZGF0ZVJlc3VsdHModHJ1ZSk7Ci0gICAgICAgICAgICB0aGlzLnNlYXJjaC5mb2N1cygpOworICAg ICAgICAgICAgaWYgKHRoaXMub3B0cy5zaG91bGRGb2N1c0lucHV0KHRoaXMpKSB7CisgICAgICAg ICAgICAgICAgdGhpcy5zZWFyY2guZm9jdXMoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAg IHRoaXMub3B0cy5lbGVtZW50LnRyaWdnZXIoJC5FdmVudCgic2VsZWN0Mi1vcGVuIikpOwogICAg ICAgICB9LAo9MjAKQEAgLTI3MzMsMTIgKzI5NzIsMTggQEAKICAgICAgICAgLy8gbXVsdGkKICAg ICAgICAgb25TZWxlY3Q6IGZ1bmN0aW9uIChkYXRhLCBvcHRpb25zKSB7Cj0yMAotICAgICAgICAg ICAgaWYgKCF0aGlzLnRyaWdnZXJTZWxlY3QoZGF0YSkpIHsgcmV0dXJuOyB9CisgICAgICAgICAg ICBpZiAoIXRoaXMudHJpZ2dlclNlbGVjdChkYXRhKSB8fCBkYXRhLnRleHQgPTNEPTNEPTNEICIi KSB7IHJldD0KdXJuOyB9Cj0yMAogICAgICAgICAgICAgdGhpcy5hZGRTZWxlY3RlZENob2ljZShk YXRhKTsKPTIwCiAgICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC50cmlnZ2VyKHsgdHlwZTog InNlbGVjdGVkIiwgdmFsOiB0aGlzLmlkKGRhdD0KYSksIGNob2ljZTogZGF0YSB9KTsKPTIwCisg ICAgICAgICAgICAvLyBrZWVwIHRyYWNrIG9mIHRoZSBzZWFyY2gncyB2YWx1ZSBiZWZvcmUgaXQg Z2V0cyBjbGVhcmVkCisgICAgICAgICAgICB0aGlzLm5leHRTZWFyY2hUZXJtID0zRCB0aGlzLm9w dHMubmV4dFNlYXJjaFRlcm0oZGF0YSwgdGhpcy5zZT0KYXJjaC52YWwoKSk7CisKKyAgICAgICAg ICAgIHRoaXMuY2xlYXJTZWFyY2goKTsKKyAgICAgICAgICAgIHRoaXMudXBkYXRlUmVzdWx0cygp OworCiAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3QgfHwgIXRoaXMub3B0cy5jbG9zZU9uU2Vs ZWN0KSB0aGlzLnBvc3Rwcm9jZXNzUj0KZXN1bHRzKGRhdGEsIGZhbHNlLCB0aGlzLm9wdHMuY2xv c2VPblNlbGVjdD0zRD0zRD0zRHRydWUpOwo9MjAKICAgICAgICAgICAgIGlmICh0aGlzLm9wdHMu Y2xvc2VPblNlbGVjdCkgewpAQCAtMjc1Miw2ICsyOTk3LDEzIEBACiAgICAgICAgICAgICAgICAg ICAgICAgICAvLyBpZiB3ZSByZWFjaGVkIG1heCBzZWxlY3Rpb24gc2l6ZSByZXBhaW50IHRoZSBy ZT0Kc3VsdHMgc28gY2hvaWNlcwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJlIHJlcGxh Y2VkIHdpdGggdGhlIG1heCBzZWxlY3Rpb24gcmVhY2hlZCBtZXM9CnNhZ2UKICAgICAgICAgICAg ICAgICAgICAgICAgIHRoaXMudXBkYXRlUmVzdWx0cyh0cnVlKTsKKyAgICAgICAgICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemVzIHNlYXJj aCdzIHZhbHVlIHdpdGggbmV4dFNlYXJjaFRlcm0gPQphbmQgdXBkYXRlIHNlYXJjaCByZXN1bHQK KyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMubmV4dFNlYXJjaFRlcm0gIT0zRCB1bmRl ZmluZWQpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoLnZhbCh0aGlz Lm5leHRTZWFyY2hUZXJtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0 ZVJlc3VsdHMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaC5zZWxl Y3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uRHJvcGRvd24oKTsKICAgICAgICAgICAg ICAgICB9IGVsc2UgewpAQCAtMjc2MSw3ICszMDEzLDcgQEAKICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICB9Cj0yMAotICAgICAgICAgICAgLy8gc2luY2UgaXQncyBub3QgcG9zc2libGUg dG8gc2VsZWN0IGFuIGVsZW1lbnQgdGhhdCBoYXMgYWxyZWE9CmR5IGJlZW4KKyAgICAgICAgICAg IC8vIHNpbmNlIGl0cyBub3QgcG9zc2libGUgdG8gc2VsZWN0IGFuIGVsZW1lbnQgdGhhdCBoYXMg YWxyZWFkPQp5IGJlZW4KICAgICAgICAgICAgIC8vIGFkZGVkIHdlIGRvIG5vdCBuZWVkIHRvIGNo ZWNrIGlmIHRoaXMgaXMgYSBuZXcgZWxlbWVudCBiZWZvPQpyZSBmaXJpbmcgY2hhbmdlCiAgICAg ICAgICAgICB0aGlzLnRyaWdnZXJDaGFuZ2UoeyBhZGRlZDogZGF0YSB9KTsKPTIwCkBAIC0yNzgw LDcgKzMwMzIsNyBAQAogICAgICAgICAgICAgICAgIGVuYWJsZWRJdGVtID0zRCAkKAogICAgICAg ICAgICAgICAgICAgICAiPGxpIGNsYXNzPTNEJ3NlbGVjdDItc2VhcmNoLWNob2ljZSc+IiArCiAg ICAgICAgICAgICAgICAgICAgICIgICAgPGRpdj48L2Rpdj4iICsKLSAgICAgICAgICAgICAgICAg ICAgIiAgICA8YSBocmVmPTNEJyMnIG9uY2xpY2s9M0QncmV0dXJuIGZhbHNlOycgY2xhc3M9M0Qn PQpzZWxlY3QyLXNlYXJjaC1jaG9pY2UtY2xvc2UnIHRhYmluZGV4PTNEJy0xJz48L2E+IiArCisg ICAgICAgICAgICAgICAgICAgICIgICAgPGEgaHJlZj0zRCcjJyBjbGFzcz0zRCdzZWxlY3QyLXNl YXJjaC1jaG9pY2UtY2xvcz0KZScgdGFiaW5kZXg9M0QnLTEnPjwvYT4iICsKICAgICAgICAgICAg ICAgICAgICAgIjwvbGk+IiksCiAgICAgICAgICAgICAgICAgZGlzYWJsZWRJdGVtID0zRCAkKAog ICAgICAgICAgICAgICAgICAgICAiPGxpIGNsYXNzPTNEJ3NlbGVjdDItc2VhcmNoLWNob2ljZSBz ZWxlY3QyLWxvY2tlZCc+IiArCkBAIC0yODA3LDEzICszMDU5LDExIEBACiAgICAgICAgICAgICAg ICAgICAub24oImNsaWNrIGRibGNsaWNrIiwgdGhpcy5iaW5kKGZ1bmN0aW9uIChlKSB7CiAgICAg ICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNJbnRlcmZhY2VFbmFibGVkKCkpIHJldHVybjsKPTIw Ci0gICAgICAgICAgICAgICAgICAkKGUudGFyZ2V0KS5jbG9zZXN0KCIuc2VsZWN0Mi1zZWFyY2gt Y2hvaWNlIikuZmFkZU91dCgnZj0KYXN0JywgdGhpcy5iaW5kKGZ1bmN0aW9uKCl7Ci0gICAgICAg ICAgICAgICAgICAgICAgdGhpcy51bnNlbGVjdCgkKGUudGFyZ2V0KSk7Ci0gICAgICAgICAgICAg ICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZmluZCgiLnNlbGVjdDItc2VhcmNoLWNob2ljZS1mb2N1 cyIpLj0KcmVtb3ZlQ2xhc3MoInNlbGVjdDItc2VhcmNoLWNob2ljZS1mb2N1cyIpOwotICAgICAg ICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICB0aGlz LmZvY3VzU2VhcmNoKCk7Ci0gICAgICAgICAgICAgICAgICB9KSkuZGVxdWV1ZSgpOworICAgICAg ICAgICAgICAgICAgdGhpcy51bnNlbGVjdCgkKGUudGFyZ2V0KSk7CisgICAgICAgICAgICAgICAg ICB0aGlzLnNlbGVjdGlvbi5maW5kKCIuc2VsZWN0Mi1zZWFyY2gtY2hvaWNlLWZvY3VzIikucmVt bz0KdmVDbGFzcygic2VsZWN0Mi1zZWFyY2gtY2hvaWNlLWZvY3VzIik7CiAgICAgICAgICAgICAg ICAgICBraWxsRXZlbnQoZSk7CisgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7CisgICAg ICAgICAgICAgICAgICB0aGlzLmZvY3VzU2VhcmNoKCk7CiAgICAgICAgICAgICAgIH0pKS5vbigi Zm9jdXMiLCB0aGlzLmJpbmQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgaWYgKCF0 aGlzLmlzSW50ZXJmYWNlRW5hYmxlZCgpKSByZXR1cm47CiAgICAgICAgICAgICAgICAgICB0aGlz LmNvbnRhaW5lci5hZGRDbGFzcygic2VsZWN0Mi1jb250YWluZXItYWN0aXZlIik7CkBAIC0yODMz LDcgKzMwODMsNiBAQAogICAgICAgICAgICAgdmFyIHZhbCA9M0QgdGhpcy5nZXRWYWwoKSwKICAg ICAgICAgICAgICAgICBkYXRhLAogICAgICAgICAgICAgICAgIGluZGV4OwotCiAgICAgICAgICAg ICBzZWxlY3RlZCA9M0Qgc2VsZWN0ZWQuY2xvc2VzdCgiLnNlbGVjdDItc2VhcmNoLWNob2ljZSIp Owo9MjAKICAgICAgICAgICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPTNEPTNEPTNEIDApIHsKQEAg LTI4NDgsMTUgKzMwOTcsMjcgQEAKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg ICB9Cj0yMAorICAgICAgICAgICAgdmFyIGV2dCA9M0QgJC5FdmVudCgic2VsZWN0Mi1yZW1vdmlu ZyIpOworICAgICAgICAgICAgZXZ0LnZhbCA9M0QgdGhpcy5pZChkYXRhKTsKKyAgICAgICAgICAg IGV2dC5jaG9pY2UgPTNEIGRhdGE7CisgICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC50cmln Z2VyKGV2dCk7CisKKyAgICAgICAgICAgIGlmIChldnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHsK KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKICAgICAgICAg ICAgIHdoaWxlKChpbmRleCA9M0QgaW5kZXhPZih0aGlzLmlkKGRhdGEpLCB2YWwpKSA+PTNEIDAp IHsKICAgICAgICAgICAgICAgICB2YWwuc3BsaWNlKGluZGV4LCAxKTsKICAgICAgICAgICAgICAg ICB0aGlzLnNldFZhbCh2YWwpOwogICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdCkgdGhp cy5wb3N0cHJvY2Vzc1Jlc3VsdHMoKTsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgc2Vs ZWN0ZWQucmVtb3ZlKCk7Cj0yMAotICAgICAgICAgICAgdGhpcy5vcHRzLmVsZW1lbnQudHJpZ2dl cih7IHR5cGU6ICJyZW1vdmVkIiwgdmFsOiB0aGlzLmlkKGRhdGE9CiksIGNob2ljZTogZGF0YSB9 KTsKKyAgICAgICAgICAgIHRoaXMub3B0cy5lbGVtZW50LnRyaWdnZXIoeyB0eXBlOiAic2VsZWN0 Mi1yZW1vdmVkIiwgdmFsOiB0aGlzPQouaWQoZGF0YSksIGNob2ljZTogZGF0YSB9KTsKICAgICAg ICAgICAgIHRoaXMudHJpZ2dlckNoYW5nZSh7IHJlbW92ZWQ6IGRhdGEgfSk7CisKKyAgICAgICAg ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9LAo9MjAKICAgICAgICAgLy8gbXVsdGkKQEAgLTI4 NzYsNyArMzEzNyw3IEBACiAgICAgICAgICAgICB9KTsKPTIwCiAgICAgICAgICAgICBjb21wb3Vu ZC5lYWNoMihmdW5jdGlvbihpLCBjaG9pY2UpIHsKLSAgICAgICAgICAgICAgICAvLyBoaWRlIGFu IG9wdGdyb3VwIGlmIGl0IGRvZXNudCBoYXZlIGFueSBzZWxlY3RhYmxlIGNoaWxkPQpyZW4KKyAg ICAgICAgICAgICAgICAvLyBoaWRlIGFuIG9wdGdyb3VwIGlmIGl0IGRvZXNuJ3QgaGF2ZSBhbnkg c2VsZWN0YWJsZSBjaGlsPQpkcmVuCiAgICAgICAgICAgICAgICAgaWYgKCFjaG9pY2UuaXMoJy5z ZWxlY3QyLXJlc3VsdC1zZWxlY3RhYmxlJykKICAgICAgICAgICAgICAgICAgICAgJiYgY2hvaWNl LmZpbmQoIi5zZWxlY3QyLXJlc3VsdC1zZWxlY3RhYmxlOm5vdCguc2VsZWN0PQoyLXNlbGVjdGVk KSIpLmxlbmd0aCA9M0Q9M0Q9M0QgMCkgewogICAgICAgICAgICAgICAgICAgICBjaG9pY2UuYWRk Q2xhc3MoInNlbGVjdDItc2VsZWN0ZWQiKTsKQEAgLTI4ODcsMTEgKzMxNDgsMTEgQEAKICAgICAg ICAgICAgICAgICBzZWxmLmhpZ2hsaWdodCgwKTsKICAgICAgICAgICAgIH0KPTIwCi0gICAgICAg ICAgICAvL0lmIGFsbCByZXN1bHRzIGFyZSBjaG9zZW4gcmVuZGVyIGZvcm1hdE5vTUF0Y2hlcwor ICAgICAgICAgICAgLy9JZiBhbGwgcmVzdWx0cyBhcmUgY2hvc2VuIHJlbmRlciBmb3JtYXROb01h dGNoZXMKICAgICAgICAgICAgIGlmKCF0aGlzLm9wdHMuY3JlYXRlU2VhcmNoQ2hvaWNlICYmICFj aG9pY2VzLmZpbHRlcignLnNlbGVjdDItPQpyZXN1bHQ6bm90KC5zZWxlY3QyLXNlbGVjdGVkKScp Lmxlbmd0aCA+IDApewogICAgICAgICAgICAgICAgIGlmKCFkYXRhIHx8IGRhdGEgJiYgIWRhdGEu bW9yZSAmJiB0aGlzLnJlc3VsdHMuZmluZCgiLnNlbGU9CmN0Mi1uby1yZXN1bHRzIikubGVuZ3Ro ID0zRD0zRD0zRCAwKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0Zvcm1hdHRlcihz ZWxmLm9wdHMuZm9ybWF0Tm9NYXRjaGVzLCAiZm9ybWF0Tj0Kb01hdGNoZXMiKSkgewotICAgICAg ICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzLmFwcGVuZCgiPGxpIGNsYXNzPTNEJ3NlbGVj dDItbm8tcmVzdWw9CnRzJz4iICsgc2VsZi5vcHRzLmZvcm1hdE5vTWF0Y2hlcyhzZWxmLnNlYXJj aC52YWwoKSkgKyAiPC9saT4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0 cy5hcHBlbmQoIjxsaSBjbGFzcz0zRCdzZWxlY3QyLW5vLXJlc3VsPQp0cyc+IiArIGV2YWx1YXRl KHNlbGYub3B0cy5mb3JtYXROb01hdGNoZXMsIHNlbGYub3B0cy5lbGVtZW50LCBzZWxmLnNlYXJj aC49CnZhbCgpKSArICI8L2xpPiIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjk2OSw3ICszMjMwLDkgQEAKICAgICAgICAgICAg ICAgICBmb3IgKHZhciBqID0zRCAwOyBqIDwgb2xkLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAg ICAgICAgICAgIGlmIChlcXVhbCh0aGlzLm9wdHMuaWQoY3VycmVudFtpXSksIHRoaXMub3B0cy5p ZChvbGRbaj0KXSkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnNwbGljZShp LCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGktLTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGlmKGk+MCl7CisgICAgICAgICAgICAgICAgICAgICAgICAJaS0tOworICAgICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgb2xkLnNwbGljZShqLCAxKTsK ICAgICAgICAgICAgICAgICAgICAgICAgIGotLTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAt Mjk4Miw3ICszMjQ1LDcgQEAKPTIwCiAgICAgICAgIC8vIG11bHRpCiAgICAgICAgIHZhbDogZnVu Y3Rpb24gKHZhbCwgdHJpZ2dlckNoYW5nZSkgewotICAgICAgICAgICAgdmFyIG9sZERhdGEsIHNl bGY9M0R0aGlzLCBjaGFuZ2VEZXRhaWxzOworICAgICAgICAgICAgdmFyIG9sZERhdGEsIHNlbGY9 M0R0aGlzOwo9MjAKICAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID0zRD0zRD0zRCAw KSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsKCk7CkBAIC0zMDIxLDcgKzMy ODQsNyBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZVNlbGVjdGlvbihkYXRhKTsK ICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGVhclNlYXJjaCgpOwogICAgICAgICAgICAgICAg ICAgICBpZiAodHJpZ2dlckNoYW5nZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50 cmlnZ2VyQ2hhbmdlKHNlbGYuYnVpbGRDaGFuZ2VEZXRhaWxzKG9sZERhdGE9CiwgdGhpcy5kYXRh KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlckNoYW5nZShzZWxmLmJ1 aWxkQ2hhbmdlRGV0YWlscyhvbGREYXRhPQosIHNlbGYuZGF0YSgpKSk7CiAgICAgICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KQEAgLTMwNjUsNyAr MzMyOCw3IEBACiAgICAgICAgICAgICB2YXIgc2VsZj0zRHRoaXMsIGlkcywgb2xkOwogICAgICAg ICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPTNEPTNEPTNEIDApIHsKICAgICAgICAgICAgICAg ICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAuZmluZCgiLnNl bGVjdDItc2VhcmNoLWNob2ljZSIpCisgICAgICAgICAgICAgICAgICAgICAuY2hpbGRyZW4oIi5z ZWxlY3QyLXNlYXJjaC1jaG9pY2UiKQogICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlv bigpIHsgcmV0dXJuICQodGhpcykuZGF0YSgic2VsZWN0Mi1kYXRhIik9CjsgfSkKICAgICAgICAg ICAgICAgICAgICAgIC5nZXQoKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0zMTA1LDcgKzMz NjgsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiAoInRhZ3MiIGluIG9wdHMpIHtvcHRzLm11 bHRpcGxlID0zRCBtdWx0aXBsZSA9M0QgdHI9CnVlO30KICAgICAgICAgICAgICAgICB9Cj0yMAot ICAgICAgICAgICAgICAgIHNlbGVjdDIgPTNEIG11bHRpcGxlID8gbmV3IE11bHRpU2VsZWN0Migp IDogbmV3IFNpbmdsZVNlbGU9CmN0MigpOworICAgICAgICAgICAgICAgIHNlbGVjdDIgPTNEIG11 bHRpcGxlID8gbmV3IHdpbmRvdy5TZWxlY3QyWyJjbGFzcyJdLm11bHRpKCk9CiA6IG5ldyB3aW5k b3cuU2VsZWN0MlsiY2xhc3MiXS5zaW5nbGUoKTsKICAgICAgICAgICAgICAgICBzZWxlY3QyLmlu aXQob3B0cyk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZihhcmdzWzBdKSA9M0Q9M0Q9 M0QgInN0cmluZyIpIHsKPTIwCkBAIC0zMTI5LDcgKzMzOTIsNyBAQAogICAgICAgICAgICAgICAg ICAgICB2YWx1ZSA9M0Qgc2VsZWN0MlttZXRob2RdLmFwcGx5KHNlbGVjdDIsIGFyZ3Muc2xpY2Uo MSk9Cik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChpbmRleE9mKGFy Z3NbMF0sIHZhbHVlTWV0aG9kcykgPj0zRCAwCi0gICAgICAgICAgICAgICAgICAgIHx8IChpbmRl eE9mKGFyZ3NbMF0sIHByb3BlcnR5TWV0aG9kcykgJiYgYXJncy5sZW5ndGggPQo9M0Q9M0QgMSkp IHsKKyAgICAgICAgICAgICAgICAgICAgfHwgKGluZGV4T2YoYXJnc1swXSwgcHJvcGVydHlNZXRo b2RzKSA+PTNEIDAgJiYgYXJncy5sPQplbmd0aCA9M0Q9M0QgMSkpIHsKICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhYm9ydCB0aGUgaXRlcmF0aW9uLCByZWFkeSB0byByZXR1 cm4gPQpmaXJzdCBtYXRjaGVkIHZhbHVlCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg fSBlbHNlIHsKQEAgLTMxNjAsMTkgKzM0MjMsMTMgQEAKICAgICAgICAgc29ydFJlc3VsdHM6IGZ1 bmN0aW9uIChyZXN1bHRzLCBjb250YWluZXIsIHF1ZXJ5KSB7CiAgICAgICAgICAgICByZXR1cm4g cmVzdWx0czsKICAgICAgICAgfSwKLSAgICAgICAgZm9ybWF0UmVzdWx0Q3NzQ2xhc3M6IGZ1bmN0 aW9uKGRhdGEpIHtyZXR1cm4gdW5kZWZpbmVkO30sCisgICAgICAgIGZvcm1hdFJlc3VsdENzc0Ns YXNzOiBmdW5jdGlvbihkYXRhKSB7cmV0dXJuIGRhdGEuY3NzO30sCiAgICAgICAgIGZvcm1hdFNl bGVjdGlvbkNzc0NsYXNzOiBmdW5jdGlvbihkYXRhLCBjb250YWluZXIpIHtyZXR1cm4gdW5kZWZp bj0KZWQ7fSwKLSAgICAgICAgZm9ybWF0Tm9NYXRjaGVzOiBmdW5jdGlvbiAoKSB7IHJldHVybiAi Tm8gbWF0Y2hlcyBmb3VuZCI7IH0sCi0gICAgICAgIGZvcm1hdElucHV0VG9vU2hvcnQ6IGZ1bmN0 aW9uIChpbnB1dCwgbWluKSB7IHZhciBuID0zRCBtaW4gLSBpbnB1dD0KLmxlbmd0aDsgcmV0dXJu ICJQbGVhc2UgZW50ZXIgIiArIG4gKyAiIG1vcmUgY2hhcmFjdGVyIiArIChuID0zRD0zRCAxPyAi IiA6PQogInMiKTsgfSwKLSAgICAgICAgZm9ybWF0SW5wdXRUb29Mb25nOiBmdW5jdGlvbiAoaW5w dXQsIG1heCkgeyB2YXIgbiA9M0QgaW5wdXQubGVuZ3RoPQogLSBtYXg7IHJldHVybiAiUGxlYXNl IGRlbGV0ZSAiICsgbiArICIgY2hhcmFjdGVyIiArIChuID0zRD0zRCAxPyAiIiA6ICJzIik9Cjsg fSwKLSAgICAgICAgZm9ybWF0U2VsZWN0aW9uVG9vQmlnOiBmdW5jdGlvbiAobGltaXQpIHsgcmV0 dXJuICJZb3UgY2FuIG9ubHkgc2VsPQplY3QgIiArIGxpbWl0ICsgIiBpdGVtIiArIChsaW1pdCA9 M0Q9M0QgMSA/ICIiIDogInMiKTsgfSwKLSAgICAgICAgZm9ybWF0TG9hZE1vcmU6IGZ1bmN0aW9u IChwYWdlTnVtYmVyKSB7IHJldHVybiAiTG9hZGluZyBtb3JlIHJlc3VsPQp0cy4uLiI7IH0sCi0g ICAgICAgIGZvcm1hdFNlYXJjaGluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gIlNlYXJjaGluZy4u LiI7IH0sCiAgICAgICAgIG1pbmltdW1SZXN1bHRzRm9yU2VhcmNoOiAwLAogICAgICAgICBtaW5p bXVtSW5wdXRMZW5ndGg6IDAsCiAgICAgICAgIG1heGltdW1JbnB1dExlbmd0aDogbnVsbCwKICAg ICAgICAgbWF4aW11bVNlbGVjdGlvblNpemU6IDAsCi0gICAgICAgIGlkOiBmdW5jdGlvbiAoZSkg eyByZXR1cm4gZS5pZDsgfSwKKyAgICAgICAgaWQ6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID0z RD0zRCB1bmRlZmluZWQgPyBudWxsIDogZS5pZDsgfSwKICAgICAgICAgbWF0Y2hlcjogZnVuY3Rp b24odGVybSwgdGV4dCkgewogICAgICAgICAgICAgcmV0dXJuIHN0cmlwRGlhY3JpdGljcygnJyt0 ZXh0KS50b1VwcGVyQ2FzZSgpLmluZGV4T2Yoc3RyaXBEaWE9CmNyaXRpY3MoJycrdGVybSkudG9V cHBlckNhc2UoKSkgPj0zRCAwOwogICAgICAgICB9LApAQCAtMzE4NCw5ICszNDQxLDQzIEBACiAg ICAgICAgIHNlbGVjdE9uQmx1cjogZmFsc2UsCiAgICAgICAgIGFkYXB0Q29udGFpbmVyQ3NzQ2xh c3M6IGZ1bmN0aW9uKGMpIHsgcmV0dXJuIGM7IH0sCiAgICAgICAgIGFkYXB0RHJvcGRvd25Dc3ND bGFzczogZnVuY3Rpb24oYykgeyByZXR1cm4gbnVsbDsgfSwKLSAgICAgICAgbmV4dFNlYXJjaFRl cm06IGZ1bmN0aW9uKHNlbGVjdGVkT2JqZWN0LCBjdXJyZW50U2VhcmNoVGVybSkgeyByZXR1PQpy biB1bmRlZmluZWQ7IH0KKyAgICAgICAgbmV4dFNlYXJjaFRlcm06IGZ1bmN0aW9uKHNlbGVjdGVk T2JqZWN0LCBjdXJyZW50U2VhcmNoVGVybSkgeyByZXR1PQpybiB1bmRlZmluZWQ7IH0sCisgICAg ICAgIHNlYXJjaElucHV0UGxhY2Vob2xkZXI6ICcnLAorICAgICAgICBjcmVhdGVTZWFyY2hDaG9p Y2VQb3NpdGlvbjogJ3RvcCcsCisgICAgICAgIHNob3VsZEZvY3VzSW5wdXQ6IGZ1bmN0aW9uIChp bnN0YW5jZSkgeworICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBkZXRlY3QgdG91Y2ggZGV2aWNl cworICAgICAgICAgICAgdmFyIHN1cHBvcnRzVG91Y2hFdmVudHMgPTNEICgoJ29udG91Y2hzdGFy dCcgaW4gd2luZG93KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KG5hdmlnYXRvci5tc01heFRvdWNoUG9pbnRzID4gMCkpOworCisgICAgICAgICAgICAvLyBPbmx5 IGRldmljZXMgd2hpY2ggc3VwcG9ydCB0b3VjaCBldmVudHMgc2hvdWxkIGJlIHNwZWNpYWwgYz0K YXNlZAorICAgICAgICAgICAgaWYgKCFzdXBwb3J0c1RvdWNoRXZlbnRzKSB7CisgICAgICAgICAg ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE5ldmVy IGZvY3VzIHRoZSBpbnB1dCBpZiBzZWFyY2ggaXMgZGlzYWJsZWQKKyAgICAgICAgICAgIGlmIChp bnN0YW5jZS5vcHRzLm1pbmltdW1SZXN1bHRzRm9yU2VhcmNoIDwgMCkgeworICAgICAgICAgICAg ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRy dWU7CisgICAgICAgIH0KICAgICB9Owo9MjAKKyAgICAkLmZuLnNlbGVjdDIubG9jYWxlcyA9M0Qg W107CisKKyAgICAkLmZuLnNlbGVjdDIubG9jYWxlc1snZW4nXSA9M0QgeworICAgICAgICAgZm9y bWF0TWF0Y2hlczogZnVuY3Rpb24gKG1hdGNoZXMpIHsgaWYgKG1hdGNoZXMgPTNEPTNEPTNEIDEp IHsgcmU9CnR1cm4gIk9uZSByZXN1bHQgaXMgYXZhaWxhYmxlLCBwcmVzcyBlbnRlciB0byBzZWxl Y3QgaXQuIjsgfSByZXR1cm4gbWF0Y2hlcz0KICsgIiByZXN1bHRzIGFyZSBhdmFpbGFibGUsIHVz ZSB1cCBhbmQgZG93biBhcnJvdyBrZXlzIHRvIG5hdmlnYXRlLiI7IH0sCisgICAgICAgICBmb3Jt YXROb01hdGNoZXM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICJObyBtYXRjaGVzIGZvdW5kIjsgfSwK KyAgICAgICAgIGZvcm1hdEFqYXhFcnJvcjogZnVuY3Rpb24gKGpxWEhSLCB0ZXh0U3RhdHVzLCBl cnJvclRocm93bikgeyByZXR1PQpybiAiTG9hZGluZyBmYWlsZWQiOyB9LAorICAgICAgICAgZm9y bWF0SW5wdXRUb29TaG9ydDogZnVuY3Rpb24gKGlucHV0LCBtaW4pIHsgdmFyIG4gPTNEIG1pbiAt IGlucHU9CnQubGVuZ3RoOyByZXR1cm4gIlBsZWFzZSBlbnRlciAiICsgbiArICIgb3IgbW9yZSBj aGFyYWN0ZXIiICsgKG4gPTNEPTNEIDEgPz0KICIiIDogInMiKTsgfSwKKyAgICAgICAgIGZvcm1h dElucHV0VG9vTG9uZzogZnVuY3Rpb24gKGlucHV0LCBtYXgpIHsgdmFyIG4gPTNEIGlucHV0Lmxl bmd0PQpoIC0gbWF4OyByZXR1cm4gIlBsZWFzZSBkZWxldGUgIiArIG4gKyAiIGNoYXJhY3RlciIg KyAobiA9M0Q9M0QgMSA/ICIiIDogInM9CiIpOyB9LAorICAgICAgICAgZm9ybWF0U2VsZWN0aW9u VG9vQmlnOiBmdW5jdGlvbiAobGltaXQpIHsgcmV0dXJuICJZb3UgY2FuIG9ubHkgc2U9CmxlY3Qg IiArIGxpbWl0ICsgIiBpdGVtIiArIChsaW1pdCA9M0Q9M0QgMSA/ICIiIDogInMiKTsgfSwKKyAg ICAgICAgIGZvcm1hdExvYWRNb3JlOiBmdW5jdGlvbiAocGFnZU51bWJlcikgeyByZXR1cm4gIkxv YWRpbmcgbW9yZSByZXN1PQpsdHM9RTI9ODA9QTYiOyB9LAorICAgICAgICAgZm9ybWF0U2VhcmNo aW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAiU2VhcmNoaW5nPUUyPTgwPUE2IjsgfSwKKyAgICB9 OworCisgICAgJC5leHRlbmQoJC5mbi5zZWxlY3QyLmRlZmF1bHRzLCAkLmZuLnNlbGVjdDIubG9j YWxlc1snZW4nXSk7CisKICAgICAkLmZuLnNlbGVjdDIuYWpheERlZmF1bHRzID0zRCB7CiAgICAg ICAgIHRyYW5zcG9ydDogJC5hamF4LAogICAgICAgICBwYXJhbXM6IHsKCmRpZmYgLXIgOWY3OTY2 ZTQ4MTQ2NmNmN2EyMjRjMWJiODcwNzhmNjI4MTY1N2JhZCAtciA1YjE3NzY4NDYzMzJjYmZjODA4 ZjA0MT0KZDBmZmM2ZTdmZmRkZDY0MzQgY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90 b29scy1mb3JtLWJhc2UuanMKLS0tIGEvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90 b29scy1mb3JtLWJhc2UuanMKKysrIGIvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90 b29scy1mb3JtLWJhc2UuanMKQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAgICAgICA9MjAKICAg ICAgICAgICAgICAgICAvLyBzY3JvbGwgdG8gZmlyc3QgaW5wdXQgZWxlbWVudAogICAgICAgICAg ICAgICAgIGlmICghc2lsZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICQodGhpcy5jb250YWlu ZXIpLmFuaW1hdGUoeworICAgICAgICAgICAgICAgICAgICAkKCdodG1sLCBib2R5JykuYW5pbWF0 ZSh7CiAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb3A6IGlucHV0X2VsZW1lbnQuJGVs Lm9mZnNldCgpLnRvcCAtIDIwCiAgICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7CiAgICAgICAg ICAgICAgICAgfQoKZGlmZiAtciA5Zjc5NjZlNDgxNDY2Y2Y3YTIyNGMxYmI4NzA3OGY2MjgxNjU3 YmFkIC1yIDViMTc3Njg0NjMzMmNiZmM4MDhmMDQxPQpkMGZmYzZlN2ZmZGRkNjQzNCBjbGllbnQv Z2FsYXh5L3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xzLWZvcm0td29ya2Zsb3cuanMKLS0tIGEvY2xp ZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90b29scy1mb3JtLXdvcmtmbG93LmpzCisrKyBi L2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtZm9ybS13b3JrZmxvdy5qcwpA QCAtMTMzLDcgKzEzMyw3IEBACiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGV4dGVuc2lv bnMudW5zaGlmdCh7CiAgICAgICAgICAgICAgICAgMCA6ICdMZWF2ZSB1bmNoYW5nZWQnLAotICAg ICAgICAgICAgICAgIDEgOiAnJworICAgICAgICAgICAgICAgIDEgOiAnX19lbXB0eV9fJwogICAg ICAgICAgICAgfSk7Cj0yMAogICAgICAgICAgICAgLy8gY3JlYXRlIGN1c3RvbSBzdWIgc2VjdGlv bgpAQCAtMTUzLDcgKzE1Myw4IEBACiAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50ICAgIDog J25ld3R5cGUnLAogICAgICAgICAgICAgICAgICAgICBsYWJlbCAgICAgICA6ICdDaGFuZ2UgZGF0 YXR5cGUnLAogICAgICAgICAgICAgICAgICAgICB0eXBlICAgICAgICA6ICdzZWxlY3QnLAotICAg ICAgICAgICAgICAgICAgICBpZ25vcmUgICAgICA6ICcnLAorICAgICAgICAgICAgICAgICAgICBp Z25vcmUgICAgICA6ICdfX2VtcHR5X18nLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSAgICAg ICA6ICdfX2VtcHR5X18nLAogICAgICAgICAgICAgICAgICAgICBvcHRpb25zICAgICA6IGV4dGVu c2lvbnMsCiAgICAgICAgICAgICAgICAgICAgIGhlbHAgICAgICAgIDogJ1RoaXMgYWN0aW9uIHdp bGwgY2hhbmdlIHRoZSBkYXRhdHlwZSBvZj0KIHRoZSBvdXRwdXQgdG8gdGhlIGluZGljYXRlZCB2 YWx1ZS4nCiAgICAgICAgICAgICAgICAgfSx7CgpkaWZmIC1yIDlmNzk2NmU0ODE0NjZjZjdhMjI0 YzFiYjg3MDc4ZjYyODE2NTdiYWQgLXIgNWIxNzc2ODQ2MzMyY2JmYzgwOGYwNDE9CmQwZmZjNmU3 ZmZkZGQ2NDM0IGNsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdG9vbHMvdG9vbHMtc2VsZWN0LWNv bnRlbnQuanMKLS0tIGEvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy90b29scy90b29scy1zZWxl Y3QtY29udGVudC5qcworKysgYi9jbGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL3Rvb2xzL3Rvb2xz LXNlbGVjdC1jb250ZW50LmpzCkBAIC03NSw2ICs3NSw3IEBACiAgICAgICAgICAgICB9KTsKICAg ICAgICAgICAgIHRoaXMuc2VsZWN0X211bHRpcGxlID0zRCBuZXcgVWkuU2VsZWN0LlZpZXcoewog ICAgICAgICAgICAgICAgIG11bHRpcGxlICAgIDogdHJ1ZSwKKyAgICAgICAgICAgICAgICBzZWFy Y2hhYmxlICA6IGZhbHNlLAogICAgICAgICAgICAgICAgIGVycm9yX3RleHQgIDogaGRhX2Vycm9y LAogICAgICAgICAgICAgICAgIG9uY2hhbmdlICAgIDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAg ICAgICAgICAgIHNlbGYudHJpZ2dlcignY2hhbmdlJyk7CgpUaGlzIGRpZmYgaXMgc28gYmlnIHRo YXQgd2UgbmVlZGVkIHRvIHRydW5jYXRlIHRoZSByZW1haW5kZXIuCgpodHRwczovL2JpdGJ1Y2tl dC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvYzgyYjAxOGZjYWMxLwpDaGFuZ2Vz ZXQ6ICAgYzgyYjAxOGZjYWMxClVzZXI6ICAgICAgICBtYXJ0ZW5zb24KRGF0ZTogICAgICAgIDIw MTUtMDItMjMgMTg6MTA6MzQrMDA6MDAKU3VtbWFyeTogICAgIGZpeCBUUyBzZWFyY2ggQVBJIHRv IGJlIHNlc3Npb25sZXNzCkFmZmVjdGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgNWIxNzc2ODQ2MzMy Y2JmYzgwOGYwNDFkMGZmYzZlN2ZmZGRkNjQzNCAtciBjODJiMDE4ZmNhYzEyMDkzYzdlM2MwZD0K YjY1NTg0ZWY5ZmNiMWQ0ZmYgbGliL2dhbGF4eS93ZWJhcHBzL3Rvb2xfc2hlZC9hcGkvc2VhcmNo LnB5Ci0tLSBhL2xpYi9nYWxheHkvd2ViYXBwcy90b29sX3NoZWQvYXBpL3NlYXJjaC5weQorKysg Yi9saWIvZ2FsYXh5L3dlYmFwcHMvdG9vbF9zaGVkL2FwaS9zZWFyY2gucHkKQEAgLTIsOCArMiw3 IEBACiBmcm9tIGdhbGF4eSBpbXBvcnQgZXhjZXB0aW9ucwogZnJvbSBnYWxheHkgaW1wb3J0IGVn Z3MKIGZyb20gZ2FsYXh5IGltcG9ydCB1dGlsCi1mcm9tIGdhbGF4eS53ZWIgaW1wb3J0IF9mdXR1 cmVfZXhwb3NlX2FwaSBhcyBleHBvc2VfYXBpCi1mcm9tIGdhbGF4eS53ZWIgaW1wb3J0IF9mdXR1 cmVfZXhwb3NlX2FwaV9yYXdfYW5vbnltb3VzIGFzIGV4cG9zZV9hcGlfcmF3Xz0KYW5vbnltb3Vz Citmcm9tIGdhbGF4eS53ZWIgaW1wb3J0IF9mdXR1cmVfZXhwb3NlX2FwaV9yYXdfYW5vbnltb3Vz X2FuZF9zZXNzaW9ubGVzcyBhcz0KIGV4cG9zZV9hcGlfcmF3X2Fub255bW91c19hbmRfc2Vzc2lv bmxlc3MKIGZyb20gZ2FsYXh5LndlYi5iYXNlLmNvbnRyb2xsZXIgaW1wb3J0IEJhc2VBUElDb250 cm9sbGVyCiBmcm9tIGdhbGF4eS53ZWJhcHBzLnRvb2xfc2hlZC5zZWFyY2gucmVwb19zZWFyY2gg aW1wb3J0IFJlcG9TZWFyY2gKIGZyb20gZ2FsYXh5LndlYiBpbXBvcnQgdXJsX2ZvcgpAQCAtMTUs NyArMTQsNyBAQAo9MjAKIGNsYXNzIFNlYXJjaENvbnRyb2xsZXIgKCBCYXNlQVBJQ29udHJvbGxl ciApOgo9MjAKLSAgICBAZXhwb3NlX2FwaV9yYXdfYW5vbnltb3VzCisgICAgQGV4cG9zZV9hcGlf cmF3X2Fub255bW91c19hbmRfc2Vzc2lvbmxlc3MKICAgICBkZWYgc2VhcmNoKCBzZWxmLCB0cmFu cywgc2VhcmNoX3Rlcm0sICoqa3dkICk6CiAgICAgICAgICIiIj0yMAogICAgICAgICBQZXJmb3Jt IGEgc2VhcmNoIG92ZXIgdGhlIFdob29zaCBpbmRleC49MjAKQEAgLTQ2LDcgKzQ1LDcgQEAKICAg ICAgICAgcmVzdWx0cyA9M0QgcmVwb19zZWFyY2guc2VhcmNoKCB0cmFucywgc2VhcmNoX3Rlcm0s IHBhZ2UgKQogICAgICAgICByZXN1bHRzWyAnaG9zdG5hbWUnIF0gPTNEIHVybF9mb3IoICcvJywg cXVhbGlmaWVkID0zRCBUcnVlICkKPTIwCi0gICAgICAgIGlmIGpzb25wOgorICAgICAgICBpZiBy ZXR1cm5fanNvbnA6CiAgICAgICAgICAgICByZXNwb25zZSA9M0QgJyVzKCVzKTsnICUgKCBjYWxs YmFjaywganNvbi5kdW1wcyggcmVzdWx0cyApICkKICAgICAgICAgZWxzZToKICAgICAgICAgICAg IHJlc3BvbnNlID0zRCBqc29uLmR1bXBzKCByZXN1bHRzICkKCgpodHRwczovL2JpdGJ1Y2tldC5v cmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvOGQyNjIwZDE3MmIyLwpDaGFuZ2VzZXQ6 ICAgOGQyNjIwZDE3MmIyClVzZXI6ICAgICAgICBtYXJ0ZW5zb24KRGF0ZTogICAgICAgIDIwMTUt MDItMjMgMTg6MjU6NDcrMDA6MDAKU3VtbWFyeTogICAgIHJlZmFjdG9yIFRTIGNhdGVnb3JpZXMg QVBJCkFmZmVjdGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgYzgyYjAxOGZjYWMxMjA5M2M3ZTNjMGRi NjU1ODRlZjlmY2IxZDRmZiAtciA4ZDI2MjBkMTcyYjIzNzBlOTA1YjhiZD0KYzBjNGYwNGQwMzAw NDQ2NjkgbGliL2dhbGF4eS93ZWJhcHBzL3Rvb2xfc2hlZC9hcGkvY2F0ZWdvcmllcy5weQotLS0g YS9saWIvZ2FsYXh5L3dlYmFwcHMvdG9vbF9zaGVkL2FwaS9jYXRlZ29yaWVzLnB5CisrKyBiL2xp Yi9nYWxheHkvd2ViYXBwcy90b29sX3NoZWQvYXBpL2NhdGVnb3JpZXMucHkKQEAgLTMsNiArMywx MSBAQAo9MjAKIGZyb20gZ2FsYXh5IGltcG9ydCB1dGlsCiBmcm9tIGdhbGF4eSBpbXBvcnQgd2Vi Citmcm9tIGdhbGF4eSBpbXBvcnQgZXhjZXB0aW9ucworZnJvbSBnYWxheHkud2ViIGltcG9ydCBy ZXF1aXJlX2FkbWluIGFzIHJlcXVpcmVfYWRtaW4KK2Zyb20gZ2FsYXh5LndlYiBpbXBvcnQgX2Z1 dHVyZV9leHBvc2VfYXBpIGFzIGV4cG9zZV9hcGkKK2Zyb20gZ2FsYXh5LndlYiBpbXBvcnQgX2Z1 dHVyZV9leHBvc2VfYXBpX2Fub255bW91cyBhcyBleHBvc2VfYXBpX2Fub255bW91cworZnJvbSBn YWxheHkud2ViIGltcG9ydCBfZnV0dXJlX2V4cG9zZV9hcGlfYW5vbnltb3VzX2FuZF9zZXNzaW9u bGVzcyBhcyBleHA9Cm9zZV9hcGlfYW5vbnltb3VzX2FuZF9zZXNzaW9ubGVzcwogZnJvbSBnYWxh eHkud2ViLmJhc2UuY29udHJvbGxlciBpbXBvcnQgQmFzZUFQSUNvbnRyb2xsZXIKIGltcG9ydCB0 b29sX3NoZWQudXRpbC5zaGVkX3V0aWxfY29tbW9uIGFzIHN1Ywo9MjAKQEAgLTE2LDYwICsyMSw1 OSBAQAogICAgICAgICB2YWx1ZV9tYXBwZXIgPTNEIHsgJ2lkJyA6IHRyYW5zLnNlY3VyaXR5LmVu Y29kZV9pZCB9CiAgICAgICAgIHJldHVybiB2YWx1ZV9tYXBwZXIKPTIwCi0gICAgQHdlYi5leHBv c2VfYXBpCisgICAgQGV4cG9zZV9hcGkKKyAgICBAcmVxdWlyZV9hZG1pbgogICAgIGRlZiBjcmVh dGUoIHNlbGYsIHRyYW5zLCBwYXlsb2FkLCAqKmt3ZCApOgogICAgICAgICAiIiIKICAgICAgICAg UE9TVCAvYXBpL2NhdGVnb3JpZXMKLSAgICAgICAgUmV0dXJucyBhIGRpY3Rpb25hcnkgb2YgaW5m b3JtYXRpb24gYWJvdXQgdGhlIGNyZWF0ZWQgY2F0ZWdvcnkuCisgICAgICAgIFJldHVybiBhIGRp Y3Rpb25hcnkgb2YgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNyZWF0ZWQgY2F0ZWdvcnkuCisgICAg ICAgIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgaW5jbHVkZWQgaW4gdGhlIHBheWxvYWQ6 Cj0yMAotOiAgICAgICBwYXJhbSBrZXk6IHRoZSBjdXJyZW50IEdhbGF4eSBhZG1pbiB1c2VyJ3Mg QVBJIGtleQotCi0gICAgICAgIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgaW5jbHVkZWQg aW4gdGhlIHBheWxvYWQuCiAgICAgICAgIDpwYXJhbSBuYW1lIChyZXF1aXJlZCk6IHRoZSBuYW1l IG9mIHRoZSBjYXRlZ29yeQogICAgICAgICA6cGFyYW0gZGVzY3JpcHRpb24gKG9wdGlvbmFsKTog dGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBjYXRlZ29yeSAoaWY9CiBub3QgcHJvdmlkZWQsIHRoZSBu YW1lIHdpbGwgYmUgdXNlZCkKKworICAgICAgICBFeGFtcGxlOiBQT1NUIC9hcGkvY2F0ZWdvcmll cy8/a2V5PTNEWFhYWVlZWFhYWVlZCisgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0t ZGF0YTsgbmFtZT0zRCJuYW1lIiBDYXRlZ29yeV9OYW1lCisgICAgICAgIENvbnRlbnQtRGlzcG9z aXRpb246IGZvcm0tZGF0YTsgbmFtZT0zRCJkZXNjcmlwdGlvbiIgQ2F0ZWdvcnlfRGVzYz0Kcmlw dGlvbgogICAgICAgICAiIiIKLSAgICAgICAgY2F0ZWdvcnlfZGljdCA9M0QgZGljdCggbWVzc2Fn ZSA9M0QgJycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPTNEICdvaycg KQotICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgY3VycmVudCB1c2VyJ3MgQVBJIGtleSBwcm92ZXMg aGUgaXMgYW4gYWRtaW4gdXNlciA9CmluIHRoaXMgVG9vbCBTaGVkLgotICAgICAgICBpZiB0cmFu cy51c2VyX2lzX2FkbWluKCk6Ci0gICAgICAgICAgICAjIEdldCB0aGUgaW5mb3JtYXRpb24gYWJv dXQgdGhlIGNhdGVnb3J5IHRvIGJlIGNyZWF0ZWQgZnJvbSB0aD0KZSBwYXlsb2FkLgotICAgICAg ICAgICAgbmFtZSA9M0QgcGF5bG9hZC5nZXQoICduYW1lJywgJycgKQotICAgICAgICAgICAgaWYg bmFtZToKLSAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9M0QgcGF5bG9hZC5nZXQoICdkZXNj cmlwdGlvbicsICcnICkKLSAgICAgICAgICAgICAgICBpZiBub3QgZGVzY3JpcHRpb246Ci0gICAg ICAgICAgICAgICAgICAgICMgRGVmYXVsdCB0aGUgZGVzY3JpcHRpb24gdG8gdGhlIG5hbWUuCi0g ICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0zRCBuYW1lCi0gICAgICAgICAgICAgICAg aWYgc3VjLmdldF9jYXRlZ29yeV9ieV9uYW1lKCB0cmFucy5hcHAsIG5hbWUgKToKLSAgICAgICAg ICAgICAgICAgICAgY2F0ZWdvcnlfZGljdFsgJ21lc3NhZ2UnIF0gPTNEICdBIGNhdGVnb3J5IHdp dGggdGhhdCBuPQphbWUgYWxyZWFkeSBleGlzdHMnCi0gICAgICAgICAgICAgICAgICAgIGNhdGVn b3J5X2RpY3RbICdzdGF0dXMnIF0gPTNEICdlcnJvcicKLSAgICAgICAgICAgICAgICBlbHNlOgot ICAgICAgICAgICAgICAgICAgICAjIENyZWF0ZSB0aGUgY2F0ZWdvcnkKLSAgICAgICAgICAgICAg ICAgICAgY2F0ZWdvcnkgPTNEIHRyYW5zLmFwcC5tb2RlbC5DYXRlZ29yeSggbmFtZT0zRG5hbWUs IGRlPQpzY3JpcHRpb249M0RkZXNjcmlwdGlvbiApCi0gICAgICAgICAgICAgICAgICAgIHRyYW5z LnNhX3Nlc3Npb24uYWRkKCBjYXRlZ29yeSApCi0gICAgICAgICAgICAgICAgICAgIHRyYW5zLnNh X3Nlc3Npb24uZmx1c2goKQotICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeV9kaWN0ID0zRCBj YXRlZ29yeS50b19kaWN0KCB2aWV3PTNEJ2VsZW1lbnQnLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfbWFwcGVyPTNEc2VsZi49Cl9f Z2V0X3ZhbHVlX21hcHBlciggdHJhbnMgKSApCi0gICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5 X2RpY3RbICdtZXNzYWdlJyBdID0zRCAiQ2F0ZWdvcnkgJyVzJyBoYXMgYmVlbj0KIGNyZWF0ZWQi ICUgc3RyKCBjYXRlZ29yeS5uYW1lICkKLSAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnlfZGlj dFsgJ3VybCcgXSA9M0Qgd2ViLnVybF9mb3IoIGNvbnRyb2xsZXI9M0QnPQpjYXRlZ29yaWVzJywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhY3Rpb249M0Qnc2hvdycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWQ9M0R0cmFucy5zZWN1cj0KaXR5LmVuY29kZV9pZCggY2F0 ZWdvcnkuaWQgKSApCisgICAgICAgIGNhdGVnb3J5X2RpY3QgPTNEIGRpY3QoIG1lc3NhZ2UgPTNE ICcnLCBzdGF0dXMgPTNEICdvaycgKQorICAgICAgICBuYW1lID0zRCBwYXlsb2FkLmdldCggJ25h bWUnLCAnJyApCisgICAgICAgIGlmIG5hbWU6CisgICAgICAgICAgICBkZXNjcmlwdGlvbiA9M0Qg cGF5bG9hZC5nZXQoICdkZXNjcmlwdGlvbicsICcnICkKKyAgICAgICAgICAgIGlmIG5vdCBkZXNj cmlwdGlvbjoKKyAgICAgICAgICAgICAgICAjIERlZmF1bHQgdGhlIGRlc2NyaXB0aW9uIHRvIHRo ZSBuYW1lLgorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0zRCBuYW1lCisgICAgICAgICAg ICBpZiBzdWMuZ2V0X2NhdGVnb3J5X2J5X25hbWUoIHRyYW5zLmFwcCwgbmFtZSApOgorICAgICAg ICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnMuQ29uZmxpY3QoICdBIGNhdGVnb3J5IHdpdGggdGhh dCBuYW1lIGFscmU9CmFkeSBleGlzdHMuJyApCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAg ICAgICAgIGNhdGVnb3J5X2RpY3RbICdtZXNzYWdlJyBdID0zRCAiTWlzc2luZyByZXF1aXJlZCBw YXJhbWV0ZXI9CiAnbmFtZScuIgotICAgICAgICAgICAgICAgIGNhdGVnb3J5X2RpY3RbICdzdGF0 dXMnIF0gPTNEICdlcnJvcicKKyAgICAgICAgICAgICAgICAjIENyZWF0ZSB0aGUgY2F0ZWdvcnkK KyAgICAgICAgICAgICAgICBjYXRlZ29yeSA9M0QgdHJhbnMuYXBwLm1vZGVsLkNhdGVnb3J5KCBu YW1lPTNEbmFtZSwgZGVzY3JpPQpwdGlvbj0zRGRlc2NyaXB0aW9uICkKKyAgICAgICAgICAgICAg ICB0cmFucy5zYV9zZXNzaW9uLmFkZCggY2F0ZWdvcnkgKQorICAgICAgICAgICAgICAgIHRyYW5z LnNhX3Nlc3Npb24uZmx1c2goKQorICAgICAgICAgICAgICAgIGNhdGVnb3J5X2RpY3QgPTNEIGNh dGVnb3J5LnRvX2RpY3QoIHZpZXc9M0QnZWxlbWVudCcsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX21hcHBlcj0zRHNlbGYuX19nZT0KdF92 YWx1ZV9tYXBwZXIoIHRyYW5zICkgKQorICAgICAgICAgICAgICAgIGNhdGVnb3J5X2RpY3RbICdt ZXNzYWdlJyBdID0zRCAiQ2F0ZWdvcnkgJyVzJyBoYXMgYmVlbiBjcmU9CmF0ZWQiICUgc3RyKCBj YXRlZ29yeS5uYW1lICkKKyAgICAgICAgICAgICAgICBjYXRlZ29yeV9kaWN0WyAndXJsJyBdID0z RCB3ZWIudXJsX2ZvciggY29udHJvbGxlcj0zRCdjYXRlPQpnb3JpZXMnLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPTNEJ3Nob3cn LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWQ9M0R0cmFucy5zZWN1cml0eS49CmVuY29kZV9pZCggY2F0ZWdvcnkuaWQgKSApCiAgICAgICAg IGVsc2U6Ci0gICAgICAgICAgICBjYXRlZ29yeV9kaWN0WyAnbWVzc2FnZScgXSA9M0QgJ1lvdSBh cmUgbm90IGF1dGhvcml6ZWQgdG8gY3JlYT0KdGUgYSBjYXRlZ29yeSBpbiB0aGlzIFRvb2wgU2hl ZC4nCi0gICAgICAgICAgICBjYXRlZ29yeV9kaWN0WyAnc3RhdHVzJyBdID0zRCAnZXJyb3InCisg ICAgICAgICAgICByYWlzZSBleGNlcHRpb25zLlJlcXVlc3RQYXJhbWV0ZXJNaXNzaW5nRXhjZXB0 aW9uKCAnTWlzc2luZyByZT0KcXVpcmVkIHBhcmFtZXRlciAibmFtZSIuJyApCiAgICAgICAgIHJl dHVybiBjYXRlZ29yeV9kaWN0Cj0yMAotICAgIEB3ZWIuZXhwb3NlX2FwaV9hbm9ueW1vdXMKKyAg ICBAZXhwb3NlX2FwaV9hbm9ueW1vdXNfYW5kX3Nlc3Npb25sZXNzCiAgICAgZGVmIGluZGV4KCBz ZWxmLCB0cmFucywgZGVsZXRlZD0zREZhbHNlLCAqKmt3ZCApOgogICAgICAgICAiIiIKICAgICAg ICAgR0VUIC9hcGkvY2F0ZWdvcmllcwotICAgICAgICBSZXR1cm5zIGEgbGlzdCBvZiBkaWN0aW9u YXJpZXMgdGhhdCBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IGVhY2g9CiBjYXRlZ29yeS4KKyAg ICAgICAgUmV0dXJuIGEgbGlzdCBvZiBkaWN0aW9uYXJpZXMgdGhhdCBjb250YWluIGluZm9ybWF0 aW9uIGFib3V0IGVhY2ggPQpDYXRlZ29yeS4KKyAgICAgICA9MjAKKyAgICAgICAgOnBhcmFtIGRl bGV0ZWQ6IGZsYWcgdXNlZCB0byBpbmNsdWRlIGRlbGV0ZWQgY2F0ZWdvcmllcworCisgICAgICAg IEV4YW1wbGU6IEdFVCBsb2NhbGhvc3Q6OTAwOS9hcGkvY2F0ZWdvcmllcwogICAgICAgICAiIiIK LSAgICAgICAgIyBFeGFtcGxlIFVSTDogaHR0cDovL2xvY2FsaG9zdDo5MDA5L2FwaS9jYXRlZ29y aWVzCiAgICAgICAgIGNhdGVnb3J5X2RpY3RzID0zRCBbXQogICAgICAgICBkZWxldGVkID0zRCB1 dGlsLmFzYm9vbCggZGVsZXRlZCApCisgICAgICAgIGlmIGRlbGV0ZWQgYW5kIG5vdCB0cmFucy51 c2VyX2lzX2FkbWluKCk6CisgICAgICAgICAgICByYWlzZSBleGNlcHRpb25zLkFkbWluUmVxdWly ZWRFeGNlcHRpb24oICdPbmx5IGFkbWluaXN0cmF0b3JzID0KY2FuIHF1ZXJ5IGRlbGV0ZWQgY2F0 ZWdvcmllcy4nICkKICAgICAgICAgZm9yIGNhdGVnb3J5IGluIHRyYW5zLnNhX3Nlc3Npb24ucXVl cnkoIHRyYW5zLmFwcC5tb2RlbC5DYXRlZ29yeSApPQogXAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoIHRyYW5zLmFwcC5tb2RlbC5DYXRlZ29yeS49CnRh YmxlLmMuZGVsZXRlZCA9M0Q9M0QgZGVsZXRlZCApIFwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAub3JkZXJfYnkoIHRyYW5zLmFwcC5tb2RlbC5DYXRlZ29yPQp5LnRh YmxlLmMubmFtZSApOgpAQCAtODEsMTUgKzg1LDE2IEBACiAgICAgICAgICAgICBjYXRlZ29yeV9k aWN0cy5hcHBlbmQoIGNhdGVnb3J5X2RpY3QgKQogICAgICAgICByZXR1cm4gY2F0ZWdvcnlfZGlj dHMKPTIwCi0gICAgQHdlYi5leHBvc2VfYXBpX2Fub255bW91cworICAgIEBleHBvc2VfYXBpX2Fu b255bW91c19hbmRfc2Vzc2lvbmxlc3MKICAgICBkZWYgc2hvdyggc2VsZiwgdHJhbnMsIGlkLCAq Kmt3ZCApOgogICAgICAgICAiIiIKICAgICAgICAgR0VUIC9hcGkvY2F0ZWdvcmllcy97ZW5jb2Rl ZF9jYXRlZ29yeV9pZH0KLSAgICAgICAgUmV0dXJucyBhIGRpY3Rpb25hcnkgb2YgaW5mb3JtYXRp b24gYWJvdXQgYSBjYXRlZ29yeS4KKyAgICAgICAgUmV0dXJuIGEgZGljdGlvbmFyeSBvZiBpbmZv cm1hdGlvbiBhYm91dCBhIGNhdGVnb3J5Lgo9MjAKLSAgICAgICAgOnBhcmFtIGlkOiB0aGUgZW5j b2RlZCBpZCBvZiB0aGUgUmVwb3NpdG9yeSBvYmplY3QKKyAgICAgICAgOnBhcmFtIGlkOiB0aGUg ZW5jb2RlZCBpZCBvZiB0aGUgQ2F0ZWdvcnkgb2JqZWN0CisgICAgICAgPTIwCisgICAgICAgIEV4 YW1wbGU6IEdFVCBsb2NhbGhvc3Q6OTAwOS9hcGkvY2F0ZWdvcmllcy9mOWNhZDdiMDFhNDcyMTM1 CiAgICAgICAgICIiIgotICAgICAgICAjIEV4YW1wbGUgVVJMOiBodHRwOi8vbG9jYWxob3N0Ojkw MDkvYXBpL2NhdGVnb3JpZXMvZjljYWQ3YjAxYTQ3MjE9CjM1CiAgICAgICAgIGNhdGVnb3J5ID0z RCBzdWMuZ2V0X2NhdGVnb3J5KCB0cmFucy5hcHAsIGlkICkKICAgICAgICAgaWYgY2F0ZWdvcnkg aXMgTm9uZToKICAgICAgICAgICAgIGNhdGVnb3J5X2RpY3QgPTNEIGRpY3QoIG1lc3NhZ2UgPTNE ICdVbmFibGUgdG8gbG9jYXRlIGNhdGVnb3J5PQogcmVjb3JkIGZvciBpZCAlcy4nICUgKCBzdHIo IGlkICkgKSwKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2Nv bW1pdHMvOTM1YTYxOGQ3NzRlLwpDaGFuZ2VzZXQ6ICAgOTM1YTYxOGQ3NzRlClVzZXI6ICAgICAg ICBtYXJ0ZW5zb24KRGF0ZTogICAgICAgIDIwMTUtMDItMjMgMTg6NTM6MTMrMDA6MDAKU3VtbWFy eTogICAgIGZpeCBlcnJvciBwcmV2ZW50aW5nIGNoYW5nZSBvZiB1c2VybmFtZSBpbiBUUwpBZmZl Y3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIDhkMjYyMGQxNzJiMjM3MGU5MDViOGJkYzBjNGYwNGQw MzAwNDQ2NjkgLXIgOTM1YTYxOGQ3NzRlN2I3YzQzOTU2NzI9CjIyNTA3ZjBkMTgwNGJhNTFjIHRl bXBsYXRlcy91c2VyL2luZm8ubWFrbwotLS0gYS90ZW1wbGF0ZXMvdXNlci9pbmZvLm1ha28KKysr IGIvdGVtcGxhdGVzL3VzZXIvaW5mby5tYWtvCkBAIC05OSwxMyArOTksMTMgQEAKICAgICAgICAg ICAgICAgICA8bGFiZWw+UHVibGljIG5hbWU6PC9sYWJlbD4KICAgICAgICAgICAgICAgICAlaWYg dC53ZWJhcHAubmFtZSA9M0Q9M0QgJ3Rvb2xfc2hlZCc6CiAgICAgICAgICAgICAgICAgICAgICVp ZiB1c2VyLmFjdGl2ZV9yZXBvc2l0b3JpZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW5w dXQgdHlwZT0zRCJoaWRkZW4iIG5hbWU9M0QidXNlcm5hbWUiIHZhbHVlPTNEIj0KJHt1c2VybmFt ZSB8IGh9Ii8+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0zRCJoaWRkZW4i IGlkPTNEIm5hbWVfaW5wdXQiIG5hbWU9M0QidT0Kc2VybmFtZSIgdmFsdWU9M0QiJHt1c2VybmFt ZSB8IGh9Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAke3VzZXJuYW1lIHwgaH0KICAgICAg ICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9M0QidG9vbFBhcmFtSGVscCIgc3R5bGU9M0Qi Y2xlYXI6IGJvdGg7PQoiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW5ub3Qg Y2hhbmdlIHlvdXIgcHVibGljIG5hbWUgYWZ0ZXIgeW91IGg9CmF2ZSBjcmVhdGVkIGEgcmVwb3Np dG9yeSBpbiB0aGlzIHRvb2wgc2hlZC4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pgog ICAgICAgICAgICAgICAgICAgICAlZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1 dCB0eXBlPTNEInRleHQiIG5hbWU9M0QidXNlcm5hbWUiIHNpemU9M0QiNDAiPQogdmFsdWU9M0Qi JHt1c2VybmFtZSB8IGh9Ii8+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0z RCJ0ZXh0IiBpZD0zRCJuYW1lX2lucHV0IiBuYW1lPTNEInVzZT0Kcm5hbWUiIHNpemU9M0QiNDAi IHZhbHVlPTNEIiR7dXNlcm5hbWUgfCBofSIvPjxkaXYgY2xhc3M9M0QidG9vbFBhcmFtSGVscCIg PQpzdHlsZT0zRCJjbGVhcjogYm90aDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlv dXIgcHVibGljIG5hbWUgcHJvdmlkZXMgYSBtZWFucyBvZiBpZGVudGlmeWk9Cm5nIHlvdSBwdWJs aWNseSB3aXRoaW4gdGhpcyB0b29sIHNoZWQuIFB1YmxpYwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5hbWVzIG11c3QgYmUgYXQgbGVhc3QgZm91ciBjaGFyYWN0ZXJzIGluIGxlbmc9CnRo IGFuZCBjb250YWluIG9ubHkgbG93ZXItY2FzZSBsZXR0ZXJzLCBudW1iZXJzLAoKCmh0dHBzOi8v Yml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy9jODFiZWU0Yjc3NWYv CkNoYW5nZXNldDogICBjODFiZWU0Yjc3NWYKVXNlcjogICAgICAgIGRhbm5vbgpEYXRlOiAgICAg ICAgMjAxNS0wMi0yMyAyMDowNzo1OCswMDowMApTdW1tYXJ5OiAgICAgQnVnZml4IGZvciBjbGlj a2luZyBjYW5jZWwgaW4gYSBtZW51IGFuZCBoYXZpbmcgdGhlIGFjdGlvbiBoYXA9CnBlbiBhbnl3 YXkuCkFmZmVjdGVkICM6ICAzIGZpbGVzCgpkaWZmIC1yIDkzNWE2MThkNzc0ZTdiN2M0Mzk1Njcy MjI1MDdmMGQxODA0YmE1MWMgLXIgYzgxYmVlNGI3NzVmNTc4ZTQ1YWZiYTU9CmZhM2JmNjliYWY3 YTAxNzU4IGNsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvdWkvcG9wdXAtbWVudS5qcwotLS0gYS9j bGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL3VpL3BvcHVwLW1lbnUuanMKKysrIGIvY2xpZW50L2dh bGF4eS9zY3JpcHRzL212Yy91aS9wb3B1cC1tZW51LmpzCkBAIC01NSw4ICs1NSwxMSBAQAogICAg ICAgICAgICAgICAgIGlmKCBvcHRpb24uZnVuYyApewogICAgICAgICAgICAgICAgICAgICAkKCB0 aGlzICkuY2hpbGRyZW4oICdhLnBvcHVwbWVudS1vcHRpb24nICkuY2xpY2soIGZ1bmM9CnRpb24o IGV2ZW50ICl7CiAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24uZnVuYy5jYWxsKCBtZW51 LCBldmVudCwgb3B0aW9uICk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBtdXN0IHBy ZXZlbnREZWZhdWx0IG90aGVyd2lzZSBjbGlja2luZyAiY2FuYz0KZWwiCisgICAgICAgICAgICAg ICAgICAgICAgICAvLyBvbiBhIHB1cmdlIG9yIHNvbWV0aGluZyBzdGlsbCBuYXZpZ2F0ZXMgYW5k IGNhdT0Kc2VzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYWN0aW9uLgorICAgICAg ICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAg ICAgICAgICAgIC8vIGJ1YmJsZSB1cCBzbyB0aGF0IGFuIG9wdGlvbiBjbGljayB3aWxsIGNhbGwg dGhlPQogY2xvc2UgYmVoYXZpb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuIGZh bHNlOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICB9KTsKCmRpZmYgLXIgOTM1YTYxOGQ3NzRlN2I3YzQzOTU2NzIyMjUwN2YwZDE4MDRiYTUx YyAtciBjODFiZWU0Yjc3NWY1NzhlNDVhZmJhNT0KZmEzYmY2OWJhZjdhMDE3NTggc3RhdGljL3Nj cmlwdHMvbXZjL3VpL3BvcHVwLW1lbnUuanMKLS0tIGEvc3RhdGljL3NjcmlwdHMvbXZjL3VpL3Bv cHVwLW1lbnUuanMKKysrIGIvc3RhdGljL3NjcmlwdHMvbXZjL3VpL3BvcHVwLW1lbnUuanMKQEAg LTU1LDggKzU1LDExIEBACiAgICAgICAgICAgICAgICAgaWYoIG9wdGlvbi5mdW5jICl7CiAgICAg ICAgICAgICAgICAgICAgICQoIHRoaXMgKS5jaGlsZHJlbiggJ2EucG9wdXBtZW51LW9wdGlvbicg KS5jbGljayggZnVuYz0KdGlvbiggZXZlbnQgKXsKICAgICAgICAgICAgICAgICAgICAgICAgIG9w dGlvbi5mdW5jLmNhbGwoIG1lbnUsIGV2ZW50LCBvcHRpb24gKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIC8vIFdlIG11c3QgcHJldmVudERlZmF1bHQgb3RoZXJ3aXNlIGNsaWNraW5nICJjYW5j PQplbCIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9uIGEgcHVyZ2Ugb3Igc29tZXRoaW5n IHN0aWxsIG5hdmlnYXRlcyBhbmQgY2F1PQpzZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v IHRoZSBhY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVs dCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnViYmxlIHVwIHNvIHRoYXQgYW4gb3B0 aW9uIGNsaWNrIHdpbGwgY2FsbCB0aGU9CiBjbG9zZSBiZWhhdmlvcgotICAgICAgICAgICAgICAg ICAgICAgICAgLy9yZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwoKZGlmZiAtciA5MzVhNjE4ZDc3NGU3YjdjNDM5 NTY3MjIyNTA3ZjBkMTgwNGJhNTFjIC1yIGM4MWJlZTRiNzc1ZjU3OGU0NWFmYmE1PQpmYTNiZjY5 YmFmN2EwMTc1OCBzdGF0aWMvc2NyaXB0cy9wYWNrZWQvbXZjL3VpL3BvcHVwLW1lbnUuanMKLS0t IGEvc3RhdGljL3NjcmlwdHMvcGFja2VkL212Yy91aS9wb3B1cC1tZW51LmpzCisrKyBiL3N0YXRp Yy9zY3JpcHRzL3BhY2tlZC9tdmMvdWkvcG9wdXAtbWVudS5qcwpAQCAtMSwxICsxLDEgQEAKLWRl ZmluZShbXSxmdW5jdGlvbigpe3ZhciBhPTNEQmFja2JvbmUuVmlldy5leHRlbmQoe2luaXRpYWxp emU6ZnVuY3Rpb24oZCxjPQope3RoaXMuJGJ1dHRvbj0zRGQ7aWYoIXRoaXMuJGJ1dHRvbi5zaXpl KCkpe3RoaXMuJGJ1dHRvbj0zRCQoIjxkaXYvPiIpfXRoaXM9Ci5vcHRpb25zPTNEY3x8W107dmFy IGU9M0R0aGlzO3RoaXMuJGJ1dHRvbi5jbGljayhmdW5jdGlvbihmKXskKCIucG9wbWVudS13cj0K YXBwZXIiKS5yZW1vdmUoKTtlLl9yZW5kZXJBbmRTaG93KGYpO3JldHVybiBmYWxzZX0pfSxfcmVu ZGVyQW5kU2hvdzpmdW5jdGlvPQpuKGMpe3RoaXMucmVuZGVyKCk7dGhpcy4kZWwuYXBwZW5kVG8o ImJvZHkiKS5jc3ModGhpcy5fZ2V0U2hvd25Qb3NpdGlvbihjKSk9Ci5zaG93KCk7dGhpcy5fc2V0 VXBDbG9zZUJlaGF2aW9yKCl9LHJlbmRlcjpmdW5jdGlvbigpe3RoaXMuJGVsLmFkZENsYXNzKCJw bz0KcG1lbnUtd3JhcHBlciIpLmhpZGUoKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSJ9KS5odG1s KHRoaXMudGVtcGxhdGUodGhpcy4kPQpidXR0b24uYXR0cigiaWQiKSx0aGlzLm9wdGlvbnMpKTtp Zih0aGlzLm9wdGlvbnMubGVuZ3RoKXt2YXIgYz0zRHRoaXM7dGhpcy49CiRlbC5maW5kKCJsaSIp LmVhY2goZnVuY3Rpb24oZSxkKXt2YXIgZj0zRGMub3B0aW9uc1tlXTtpZihmLmZ1bmMpeyQodGhp cykuYz0KaGlsZHJlbigiYS5wb3B1cG1lbnUtb3B0aW9uIikuY2xpY2soZnVuY3Rpb24oZyl7Zi5m dW5jLmNhbGwoYyxnLGYpfSl9fSl9cmV0PQp1cm4gdGhpc30sdGVtcGxhdGU6ZnVuY3Rpb24oZCxj KXtyZXR1cm5bJzx1bCBpZD0zRCInLGQsJy1tZW51IiBjbGFzcz0zRCJkcm89CnBkb3duLW1lbnUi PicsdGhpcy5fdGVtcGxhdGVPcHRpb25zKGMpLCI8L3VsPiJdLmpvaW4oIiIpfSxfdGVtcGxhdGVP cHRpb25zOj0KZnVuY3Rpb24oYyl7aWYoIWMubGVuZ3RoKXtyZXR1cm4iPGxpPihubyBvcHRpb25z KTwvbGk+In1yZXR1cm4gXy5tYXAoYyxmdW5jPQp0aW9uKGYpe2lmKGYuZGl2aWRlcil7cmV0dXJu JzxsaSBjbGFzcz0zRCJkaXZpZGVyIj48L2xpPid9ZWxzZXtpZihmLmhlYWRlcik9CntyZXR1cm5b JzxsaSBjbGFzcz0zRCJoZWFkIj48YSBocmVmPTNEImphdmFzY3JpcHQ6dm9pZCgwKTsiPicsZi5o dG1sLCI8L2E+PD0KL2xpPiJdLmpvaW4oIiIpfX12YXIgZT0zRGYuaHJlZnx8ImphdmFzY3JpcHQ6 dm9pZCgwKTsiLGc9M0QoZi50YXJnZXQpPygnIHRhPQpyZ2V0PTNEIicrZi50YXJnZXQrJyInKToo IiIpLGQ9M0QoZi5jaGVja2VkKT8oJzxzcGFuIGNsYXNzPTNEImZhIGZhLWNoZWNrIj49Cjwvc3Bh bj4nKTooIiIpO3JldHVyblsnPGxpPjxhIGNsYXNzPTNEInBvcHVwbWVudS1vcHRpb24iIGhyZWY9 M0QiJyxlLCciJyxnLD0KIj4iLGQsZi5odG1sLCI8L2E+PC9saT4iXS5qb2luKCIiKX0pLmpvaW4o IiIpfSxfZ2V0U2hvd25Qb3NpdGlvbjpmdW5jdGlvbihkPQope3ZhciBlPTNEdGhpcy4kZWwud2lk dGgoKTt2YXIgYz0zRGQucGFnZVgtZS8yO2M9M0RNYXRoLm1pbihjLCQoZG9jdW1lbnQpLnM9CmNy b2xsTGVmdCgpKyQod2luZG93KS53aWR0aCgpLWUtNSk7Yz0zRE1hdGgubWF4KGMsJChkb2N1bWVu dCkuc2Nyb2xsTGVmdCgpKz0KNSk7cmV0dXJue3RvcDpkLnBhZ2VZLGxlZnQ6Y319LF9zZXRVcENs b3NlQmVoYXZpb3I6ZnVuY3Rpb24oKXt2YXIgZT0zRHRoaXM7PQpmdW5jdGlvbiBjKGcpeyQoZG9j dW1lbnQpLm9mZigiY2xpY2suY2xvc2VfcG9wdXAiKTtpZih3aW5kb3cucGFyZW50IT0zRD0zRHc9 CmluZG93KXt0cnl7JCh3aW5kb3cucGFyZW50LmRvY3VtZW50KS5vZmYoImNsaWNrLmNsb3NlX3Bv cHVwIil9Y2F0Y2goZil7fX1lbD0Kc2V7dHJ5eyQoImlmcmFtZSNnYWxheHlfbWFpbiIpLmNvbnRl bnRzKCkub2ZmKCJjbGljay5jbG9zZV9wb3B1cCIpfWNhdGNoKGYpPQp7fX1lLnJlbW92ZSgpfSQo Imh0bWwiKS5vbmUoImNsaWNrLmNsb3NlX3BvcHVwIixjKTtpZih3aW5kb3cucGFyZW50IT0zRD0z RHc9CmluZG93KXt0cnl7JCh3aW5kb3cucGFyZW50LmRvY3VtZW50KS5maW5kKCJodG1sIikub25l KCJjbGljay5jbG9zZV9wb3B1cCIsYz0KKX1jYXRjaChkKXt9fWVsc2V7dHJ5eyQoImlmcmFtZSNn YWxheHlfbWFpbiIpLmNvbnRlbnRzKCkub25lKCJjbGljay5jbG9zZV9wPQpvcHVwIixjKX1jYXRj aChkKXt9fX0sYWRkSXRlbTpmdW5jdGlvbihkLGMpe2M9M0QoYz49M0QwKT9jOnRoaXMub3B0aW9u cy5sZW49Cmd0aDt0aGlzLm9wdGlvbnMuc3BsaWNlKGMsMCxkKTtyZXR1cm4gdGhpc30scmVtb3Zl SXRlbTpmdW5jdGlvbihjKXtpZihjPj0zRD0KMCl7dGhpcy5vcHRpb25zLnNwbGljZShjLDEpfXJl dHVybiB0aGlzfSxmaW5kSW5kZXhCeUh0bWw6ZnVuY3Rpb24oZCl7Zm9yKHZhPQpyIGM9M0QwO2M8 dGhpcy5vcHRpb25zLmxlbmd0aDtjKyspe2lmKF8uaGFzKHRoaXMub3B0aW9uc1tjXSwiaHRtbCIp JiYodGhpcy49Cm9wdGlvbnNbY10uaHRtbD0zRD0zRD0zRGQpKXtyZXR1cm4gY319cmV0dXJuIG51 bGx9LGZpbmRJdGVtQnlIdG1sOmZ1bmN0aW9uKD0KYyl7cmV0dXJuIHRoaXMub3B0aW9uc1sodGhp cy5maW5kSW5kZXhCeUh0bWwoYykpXX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1PQpybiJQb3B1 cE1lbnUifX0pO2EuY3JlYXRlPTNEZnVuY3Rpb24gYihkLGMpe3JldHVybiBuZXcgYShkLGMpfTth Lm1ha2VfcG9wdXA9Cm1lbnU9M0RmdW5jdGlvbihkLGUpe3ZhciBjPTNEW107Xy5lYWNoKGUsZnVu Y3Rpb24oaCxmKXt2YXIgZz0zRHtodG1sOmZ9O2lmKD0KaD0zRD0zRD0zRG51bGwpe2cuaGVhZGVy PTNEdHJ1ZX1lbHNle2lmKGpRdWVyeS50eXBlKGgpPTNEPTNEPTNEImZ1bmN0aW9uIil7PQpnLmZ1 bmM9M0RofX1jLnB1c2goZyl9KTtyZXR1cm4gbmV3IGEoJChkKSxjKX07YS5jb252ZXJ0TGlua3NU b09wdGlvbnM9M0RmdW49CmN0aW9uKGUsYyl7ZT0zRCQoZSk7Yz0zRGN8fCJhIjt2YXIgZD0zRFtd O2UuZmluZChjKS5lYWNoKGZ1bmN0aW9uKGosZyl7dmFyID0KaD0zRHt9LGY9M0QkKGopO2guaHRt bD0zRGYudGV4dCgpO2lmKGYuYXR0cigiaHJlZiIpKXt2YXIgbD0zRGYuYXR0cigiaHJlZiIpPQos bT0zRGYuYXR0cigidGFyZ2V0Iiksaz0zRGYuYXR0cigiY29uZmlybSIpO2guZnVuYz0zRGZ1bmN0 aW9uKCl7aWYoKGspJiYoIWM9Cm9uZmlybShrKSkpe3JldHVybn1zd2l0Y2gobSl7Y2FzZSJfcGFy ZW50Ijp3aW5kb3cucGFyZW50LmxvY2F0aW9uPTNEbDticmVhaz0KO2Nhc2UiX3RvcCI6d2luZG93 LnRvcC5sb2NhdGlvbj0zRGw7YnJlYWs7ZGVmYXVsdDp3aW5kb3cubG9jYXRpb249M0RsfX19ZC5w PQp1c2goaCl9KTtyZXR1cm4gZH07YS5mcm9tRXhpc3RpbmdEb209M0RmdW5jdGlvbihmLGUsYyl7 Zj0zRCQoZik7ZT0zRCQoZSk7dmE9CnIgZD0zRGEuY29udmVydExpbmtzVG9PcHRpb25zKGUsYyk7 ZS5yZW1vdmUoKTtyZXR1cm4gbmV3IGEoZixkKX07YS5tYWtlX3BvcD0KdXBfbWVudXM9M0RmdW5j dGlvbihlLGQsZil7ZT0zRGV8fGRvY3VtZW50O2Q9M0RkfHwiZGl2W3BvcHVwbWVudV0iO2Y9M0Rm fHxmPQp1bmN0aW9uKGcsaCl7cmV0dXJuIiMiK2cuYXR0cigicG9wdXBtZW51Iil9O3ZhciBjPTNE W107JChlKS5maW5kKGQpLmVhY2goZnU9Cm5jdGlvbigpe3ZhciBnPTNEJCh0aGlzKSxoPTNEJChl KS5maW5kKGYoZyxlKSk7Yy5wdXNoKGEuZnJvbURvbShoLGcpKTtoLmFkZD0KQ2xhc3MoInBvcHVw Iil9KTtyZXR1cm4gY307cmV0dXJuIGF9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitk ZWZpbmUoW10sZnVuY3Rpb24oKXt2YXIgYT0zREJhY2tib25lLlZpZXcuZXh0ZW5kKHtpbml0aWFs aXplOmZ1bmN0aW9uKGQsYz0KKXt0aGlzLiRidXR0b249M0RkO2lmKCF0aGlzLiRidXR0b24uc2l6 ZSgpKXt0aGlzLiRidXR0b249M0QkKCI8ZGl2Lz4iKX10aGlzPQoub3B0aW9ucz0zRGN8fFtdO3Zh ciBlPTNEdGhpczt0aGlzLiRidXR0b24uY2xpY2soZnVuY3Rpb24oZil7JCgiLnBvcG1lbnUtd3I9 CmFwcGVyIikucmVtb3ZlKCk7ZS5fcmVuZGVyQW5kU2hvdyhmKTtyZXR1cm4gZmFsc2V9KX0sX3Jl bmRlckFuZFNob3c6ZnVuY3Rpbz0KbihjKXt0aGlzLnJlbmRlcigpO3RoaXMuJGVsLmFwcGVuZFRv KCJib2R5IikuY3NzKHRoaXMuX2dldFNob3duUG9zaXRpb24oYykpPQouc2hvdygpO3RoaXMuX3Nl dFVwQ2xvc2VCZWhhdmlvcigpfSxyZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLiRlbC5hZGRDbGFzcygi cG89CnBtZW51LXdyYXBwZXIiKS5oaWRlKCkuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUifSkuaHRt bCh0aGlzLnRlbXBsYXRlKHRoaXMuJD0KYnV0dG9uLmF0dHIoImlkIiksdGhpcy5vcHRpb25zKSk7 aWYodGhpcy5vcHRpb25zLmxlbmd0aCl7dmFyIGM9M0R0aGlzO3RoaXMuPQokZWwuZmluZCgibGki KS5lYWNoKGZ1bmN0aW9uKGUsZCl7dmFyIGY9M0RjLm9wdGlvbnNbZV07aWYoZi5mdW5jKXskKHRo aXMpLmM9CmhpbGRyZW4oImEucG9wdXBtZW51LW9wdGlvbiIpLmNsaWNrKGZ1bmN0aW9uKGcpe2Yu ZnVuYy5jYWxsKGMsZyxmKTtnLnByZXZlbj0KdERlZmF1bHQoKX0pfX0pfXJldHVybiB0aGlzfSx0 ZW1wbGF0ZTpmdW5jdGlvbihkLGMpe3JldHVyblsnPHVsIGlkPTNEIicsZCwnPQotbWVudSIgY2xh c3M9M0QiZHJvcGRvd24tbWVudSI+Jyx0aGlzLl90ZW1wbGF0ZU9wdGlvbnMoYyksIjwvdWw+Il0u am9pbigiIik9Cn0sX3RlbXBsYXRlT3B0aW9uczpmdW5jdGlvbihjKXtpZighYy5sZW5ndGgpe3Jl dHVybiI8bGk+KG5vIG9wdGlvbnMpPC9saT4ifT0KcmV0dXJuIF8ubWFwKGMsZnVuY3Rpb24oZil7 aWYoZi5kaXZpZGVyKXtyZXR1cm4nPGxpIGNsYXNzPTNEImRpdmlkZXIiPjwvbGk+PQonfWVsc2V7 aWYoZi5oZWFkZXIpe3JldHVyblsnPGxpIGNsYXNzPTNEImhlYWQiPjxhIGhyZWY9M0QiamF2YXNj cmlwdDp2b2lkKDA9Cik7Ij4nLGYuaHRtbCwiPC9hPjwvbGk+Il0uam9pbigiIil9fXZhciBlPTNE Zi5ocmVmfHwiamF2YXNjcmlwdDp2b2lkKDApOyIsZz0KPTNEKGYudGFyZ2V0KT8oJyB0YXJnZXQ9 M0QiJytmLnRhcmdldCsnIicpOigiIiksZD0zRChmLmNoZWNrZWQpPygnPHNwYW4gY2xhPQpzcz0z RCJmYSBmYS1jaGVjayI+PC9zcGFuPicpOigiIik7cmV0dXJuWyc8bGk+PGEgY2xhc3M9M0QicG9w dXBtZW51LW9wdGlvbiI9CiBocmVmPTNEIicsZSwnIicsZywiPiIsZCxmLmh0bWwsIjwvYT48L2xp PiJdLmpvaW4oIiIpfSkuam9pbigiIil9LF9nZXRTaG93bj0KUG9zaXRpb246ZnVuY3Rpb24oZCl7 dmFyIGU9M0R0aGlzLiRlbC53aWR0aCgpO3ZhciBjPTNEZC5wYWdlWC1lLzI7Yz0zRE1hdGguPQpt aW4oYywkKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkrJCh3aW5kb3cpLndpZHRoKCktZS01KTtjPTNE TWF0aC5tYXgoYywkKGRvY3U9Cm1lbnQpLnNjcm9sbExlZnQoKSs1KTtyZXR1cm57dG9wOmQucGFn ZVksbGVmdDpjfX0sX3NldFVwQ2xvc2VCZWhhdmlvcjpmdW5jdD0KaW9uKCl7dmFyIGU9M0R0aGlz O2Z1bmN0aW9uIGMoZyl7JChkb2N1bWVudCkub2ZmKCJjbGljay5jbG9zZV9wb3B1cCIpO2lmKHdp PQpuZG93LnBhcmVudCE9M0Q9M0R3aW5kb3cpe3RyeXskKHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQp Lm9mZigiY2xpY2suY2xvc2VfcG89CnB1cCIpfWNhdGNoKGYpe319ZWxzZXt0cnl7JCgiaWZyYW1l I2dhbGF4eV9tYWluIikuY29udGVudHMoKS5vZmYoImNsaWNrLmNsbz0Kc2VfcG9wdXAiKX1jYXRj aChmKXt9fWUucmVtb3ZlKCl9JCgiaHRtbCIpLm9uZSgiY2xpY2suY2xvc2VfcG9wdXAiLGMpO2lm KHdpPQpuZG93LnBhcmVudCE9M0Q9M0R3aW5kb3cpe3RyeXskKHdpbmRvdy5wYXJlbnQuZG9jdW1l bnQpLmZpbmQoImh0bWwiKS5vbmUoImM9CmxpY2suY2xvc2VfcG9wdXAiLGMpfWNhdGNoKGQpe319 ZWxzZXt0cnl7JCgiaWZyYW1lI2dhbGF4eV9tYWluIikuY29udGVudHMoKT0KLm9uZSgiY2xpY2su Y2xvc2VfcG9wdXAiLGMpfWNhdGNoKGQpe319fSxhZGRJdGVtOmZ1bmN0aW9uKGQsYyl7Yz0zRChj Pj0zRDApPQo/Yzp0aGlzLm9wdGlvbnMubGVuZ3RoO3RoaXMub3B0aW9ucy5zcGxpY2UoYywwLGQp O3JldHVybiB0aGlzfSxyZW1vdmVJdGVtOmY9CnVuY3Rpb24oYyl7aWYoYz49M0QwKXt0aGlzLm9w dGlvbnMuc3BsaWNlKGMsMSl9cmV0dXJuIHRoaXN9LGZpbmRJbmRleEJ5SHRtbD0KOmZ1bmN0aW9u KGQpe2Zvcih2YXIgYz0zRDA7Yzx0aGlzLm9wdGlvbnMubGVuZ3RoO2MrKyl7aWYoXy5oYXModGhp cy5vcHRpb25zPQpbY10sImh0bWwiKSYmKHRoaXMub3B0aW9uc1tjXS5odG1sPTNEPTNEPTNEZCkp e3JldHVybiBjfX1yZXR1cm4gbnVsbH0sZmluZEk9CnRlbUJ5SHRtbDpmdW5jdGlvbihjKXtyZXR1 cm4gdGhpcy5vcHRpb25zWyh0aGlzLmZpbmRJbmRleEJ5SHRtbChjKSldfSx0b1N0cj0KaW5nOmZ1 bmN0aW9uKCl7cmV0dXJuIlBvcHVwTWVudSJ9fSk7YS5jcmVhdGU9M0RmdW5jdGlvbiBiKGQsYyl7 cmV0dXJuIG5ldyBhPQooZCxjKX07YS5tYWtlX3BvcHVwbWVudT0zRGZ1bmN0aW9uKGQsZSl7dmFy IGM9M0RbXTtfLmVhY2goZSxmdW5jdGlvbihoLGYpe3Y9CmFyIGc9M0R7aHRtbDpmfTtpZihoPTNE PTNEPTNEbnVsbCl7Zy5oZWFkZXI9M0R0cnVlfWVsc2V7aWYoalF1ZXJ5LnR5cGUoaCk9Cj0zRD0z RD0zRCJmdW5jdGlvbiIpe2cuZnVuYz0zRGh9fWMucHVzaChnKX0pO3JldHVybiBuZXcgYSgkKGQp LGMpfTthLmNvbnZlcj0KdExpbmtzVG9PcHRpb25zPTNEZnVuY3Rpb24oZSxjKXtlPTNEJChlKTtj PTNEY3x8ImEiO3ZhciBkPTNEW107ZS5maW5kKGMpLmVhPQpjaChmdW5jdGlvbihqLGcpe3ZhciBo PTNEe30sZj0zRCQoaik7aC5odG1sPTNEZi50ZXh0KCk7aWYoZi5hdHRyKCJocmVmIikpe3Y9CmFy IGw9M0RmLmF0dHIoImhyZWYiKSxtPTNEZi5hdHRyKCJ0YXJnZXQiKSxrPTNEZi5hdHRyKCJjb25m aXJtIik7aC5mdW5jPTNEZj0KdW5jdGlvbigpe2lmKChrKSYmKCFjb25maXJtKGspKSl7cmV0dXJu fXN3aXRjaChtKXtjYXNlIl9wYXJlbnQiOndpbmRvdy5wYXJlPQpudC5sb2NhdGlvbj0zRGw7YnJl YWs7Y2FzZSJfdG9wIjp3aW5kb3cudG9wLmxvY2F0aW9uPTNEbDticmVhaztkZWZhdWx0OndpbmQ9 Cm93LmxvY2F0aW9uPTNEbH19fWQucHVzaChoKX0pO3JldHVybiBkfTthLmZyb21FeGlzdGluZ0Rv bT0zRGZ1bmN0aW9uKGYsZSxjKT0Ke2Y9M0QkKGYpO2U9M0QkKGUpO3ZhciBkPTNEYS5jb252ZXJ0 TGlua3NUb09wdGlvbnMoZSxjKTtlLnJlbW92ZSgpO3JldHVybiBuPQpldyBhKGYsZCl9O2EubWFr ZV9wb3B1cF9tZW51cz0zRGZ1bmN0aW9uKGUsZCxmKXtlPTNEZXx8ZG9jdW1lbnQ7ZD0zRGR8fCJk aXY9Cltwb3B1cG1lbnVdIjtmPTNEZnx8ZnVuY3Rpb24oZyxoKXtyZXR1cm4iIyIrZy5hdHRyKCJw b3B1cG1lbnUiKX07dmFyIGM9M0RbXT0KOyQoZSkuZmluZChkKS5lYWNoKGZ1bmN0aW9uKCl7dmFy IGc9M0QkKHRoaXMpLGg9M0QkKGUpLmZpbmQoZihnLGUpKTtjLnB1c2goPQphLmZyb21Eb20oaCxn KSk7aC5hZGRDbGFzcygicG9wdXAiKX0pO3JldHVybiBjfTtyZXR1cm4gYX0pOwpcIE5vIG5ld2xp bmUgYXQgZW5kIG9mIGZpbGUKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1j ZW50cmFsL2NvbW1pdHMvNWVhOWZjMmY3NWFhLwpDaGFuZ2VzZXQ6ICAgNWVhOWZjMmY3NWFhClVz ZXI6ICAgICAgICBkYW5ub24KRGF0ZTogICAgICAgIDIwMTUtMDItMjMgMjE6Mjg6MDErMDA6MDAK U3VtbWFyeTogICAgIFZlcmlmeSBhbmQgYXBwbHkgQGptY2hpbHRvbidzIGZpeCBmcm9tIGh0dHBz Oi8vZ2l0aHViLmNvbS9qbWNoPQppbHRvbi9nYWxheHktY2VudHJhbC9jb21taXQvMzA2YTg2NTU4 YTdlZTdiZTFiYzJkNjhjZDkzOWIxNmI1ZjE4NjNkNCB0byBuZXg9CnQtc3RhYmxlLiAgU2hvdWxk IGJlIHJlZmFjdG9yZWQgaW50byB1c2luZyB0aGUgc2FtZSBnYWxheHkubWVudS5qcyBvYmplY3Rz ID0KLS0gSSdtIGFzc3VtaW5nIHRoYXQncyB3aHkgdGhpbmdzIGxpa2UgUG9wdXBNZW51LmZyb21F eGlzdGluZ0RvbSBleGlzdCBhbmQgPQphcmUgb3RoZXJ3aXNlIHVudXNlZC4KQWZmZWN0ZWQgIzog IDMgZmlsZXMKCmRpZmYgLXIgYzgxYmVlNGI3NzVmNTc4ZTQ1YWZiYTVmYTNiZjY5YmFmN2EwMTc1 OCAtciA1ZWE5ZmMyZjc1YWFlOGU1MmUxNjRhYj0KNzVjNzFhYzk3ZjgyYmZmMjQgY2xpZW50L2dh bGF4eS9zY3JpcHRzL2dhbGF4eS5iYXNlLmpzCi0tLSBhL2NsaWVudC9nYWxheHkvc2NyaXB0cy9n YWxheHkuYmFzZS5qcworKysgYi9jbGllbnQvZ2FsYXh5L3NjcmlwdHMvZ2FsYXh5LmJhc2UuanMK QEAgLTE3MSw3ICsxNzEsNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg ICBvcHRpb25zWyBsaW5rLnRleHQoKSBdID0zRCB7CiAgICAgICAgICAgICAgICAgICAgIHVybDog aHJlZiwKLSAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigpIHsKKyAgICAgICAg ICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbiggZXZlbnQgKSB7Cj0yMAogICAgICAgICAgICAg ICAgICAgICAgICAgLy8gaWYgdGhlcmVzIGNvbmZpcm0gdGV4dCwgc2VuZCB0aGUgZGlhbG9nCiAg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFjb25maXJtdGV4dCB8fCBjb25maXJtKCBjb25m aXJtdGV4dCApICkgewpAQCAtMTg1LDcgKzE4NSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rLmNsaWNr KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVu dERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgIH0KCmRpZmYgLXIgYzgxYmVl NGI3NzVmNTc4ZTQ1YWZiYTVmYTNiZjY5YmFmN2EwMTc1OCAtciA1ZWE5ZmMyZjc1YWFlOGU1MmUx NjRhYj0KNzVjNzFhYzk3ZjgyYmZmMjQgc3RhdGljL3NjcmlwdHMvZ2FsYXh5LmJhc2UuanMKLS0t IGEvc3RhdGljL3NjcmlwdHMvZ2FsYXh5LmJhc2UuanMKKysrIGIvc3RhdGljL3NjcmlwdHMvZ2Fs YXh5LmJhc2UuanMKQEAgLTE3MSw3ICsxNzEsNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAg ICAgICAgICAgICAgICBvcHRpb25zWyBsaW5rLnRleHQoKSBdID0zRCB7CiAgICAgICAgICAgICAg ICAgICAgIHVybDogaHJlZiwKLSAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbigp IHsKKyAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbiggZXZlbnQgKSB7Cj0yMAog ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmVzIGNvbmZpcm0gdGV4dCwgc2VuZCB0 aGUgZGlhbG9nCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFjb25maXJtdGV4dCB8fCBj b25maXJtKCBjb25maXJtdGV4dCApICkgewpAQCAtMTg1LDcgKzE4NSwxMCBAQAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsaW5rLmNsaWNrKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwogICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgIH0KCmRp ZmYgLXIgYzgxYmVlNGI3NzVmNTc4ZTQ1YWZiYTVmYTNiZjY5YmFmN2EwMTc1OCAtciA1ZWE5ZmMy Zjc1YWFlOGU1MmUxNjRhYj0KNzVjNzFhYzk3ZjgyYmZmMjQgc3RhdGljL3NjcmlwdHMvcGFja2Vk L2dhbGF4eS5iYXNlLmpzCi0tLSBhL3N0YXRpYy9zY3JpcHRzL3BhY2tlZC9nYWxheHkuYmFzZS5q cworKysgYi9zdGF0aWMvc2NyaXB0cy9wYWNrZWQvZ2FsYXh5LmJhc2UuanMKQEAgLTEsMSArMSwx IEBACi0oZnVuY3Rpb24oKXt2YXIgYj0zRDA7dmFyIGM9M0RbIm1zIiwibW96Iiwid2Via2l0Iiwi byJdO2Zvcih2YXIgYT0zRDA7YTxjLj0KbGVuZ3RoJiYhd2luZG93LnJlcXVlc3RBbmltYXRpb25G cmFtZTsrK2Epe3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9M0R3PQppbmRvd1tjW2FdKyJS ZXF1ZXN0QW5pbWF0aW9uRnJhbWUiXTt3aW5kb3cuY2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1l PTNEd2k9Cm5kb3dbY1thXSsiQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lIl19aWYoIXdpbmRv dy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpez0Kd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT0z RGZ1bmN0aW9uKGgsZSl7dmFyIGQ9M0RuZXcgRGF0ZSgpLmdldFRpbWUoKTt2PQphciBmPTNETWF0 aC5tYXgoMCwxNi0oZC1iKSk7dmFyIGc9M0R3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2go ZCtmKX0sZik9CjtiPTNEZCtmO3JldHVybiBnfX1pZighd2luZG93LmNhbmNlbEFuaW1hdGlvbkZy YW1lKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRj0KcmFtZT0zRGZ1bmN0aW9uKGQpe2NsZWFyVGlt ZW91dChkKX19fSgpKTtpZighQXJyYXkuaW5kZXhPZil7QXJyYXkucHJvdG90eXBlPQouaW5kZXhP Zj0zRGZ1bmN0aW9uKGMpe2Zvcih2YXIgYj0zRDAsYT0zRHRoaXMubGVuZ3RoO2I8YTtiKyspe2lm KHRoaXNbYl09M0Q9Cj0zRGMpe3JldHVybiBifX1yZXR1cm4gLTF9fWZ1bmN0aW9uIG9ial9sZW5n dGgoYyl7aWYoYy5sZW5ndGghPTNEPTNEdW5kZWZpbj0KZWQpe3JldHVybiBjLmxlbmd0aH12YXIg Yj0zRDA7Zm9yKHZhciBhIGluIGMpe2IrK31yZXR1cm4gYn0kLmZuLm1ha2VBYnNvbHV0PQplPTNE ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPTNEJCh0aGlzKTt2 YXIgYz0zRGIucG9zaXQ9CmlvbigpO2IuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLG1hcmdpbkxl ZnQ6MCxtYXJnaW5Ub3A6MCx0b3A6Yy50b3AsbGVmdDpjLj0KbGVmdCxyaWdodDokKHdpbmRvdyku d2lkdGgoKS0oYy5sZWZ0K2Iud2lkdGgoKSl9KTtpZihhKXtiLnJlbW92ZSgpLmFwcGVuZFRvPQoo ImJvZHkiKX19KX07ZnVuY3Rpb24gbWFrZV9wb3B1cG1lbnUoYixjKXt2YXIgYT0zRChiLmRhdGEo Im1lbnVfb3B0aW9ucyIpKTs9CmIuZGF0YSgibWVudV9vcHRpb25zIixjKTtpZihhKXtyZXR1cm59 Yi5iaW5kKCJjbGljay5zaG93X3BvcHVwIixmdW5jdGlvbihkKT0KeyQoIi5wb3BtZW51LXdyYXBw ZXIiKS5yZW1vdmUoKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGc9M0QkKCI8dWwgY2xhc3M9 Cj0zRCdkcm9wZG93bi1tZW51JyBpZD0zRCciK2IuYXR0cigiaWQiKSsiLW1lbnUnPjwvdWw+Iik7 dmFyIGY9M0RiLmRhdGEoIm1lbj0KdV9vcHRpb25zIik7aWYob2JqX2xlbmd0aChmKTw9M0QwKXsk KCI8bGk+Tm8gT3B0aW9ucy48L2xpPiIpLmFwcGVuZFRvKGcpfSQuPQplYWNoKGYsZnVuY3Rpb24o aixpKXtpZihpKXt2YXIgbD0zRGkuYWN0aW9ufHxpO2cuYXBwZW5kKCQoIjxsaT48L2xpPiIpLmFw cGU9Cm5kKCQoIjxhPiIpLmF0dHIoImhyZWYiLGkudXJsKS5odG1sKGopLmNsaWNrKGwpKSl9ZWxz ZXtnLmFwcGVuZCgkKCI8bGk+PC9saT0KPiIpLmFkZENsYXNzKCJoZWFkIikuYXBwZW5kKCQoIjxh IGhyZWY9M0QnIyc+PC9hPiIpLmh0bWwoaikpKX19KTt2YXIgaD0zRCQoPQoiPGRpdiBjbGFzcz0z RCdwb3BtZW51LXdyYXBwZXInIHN0eWxlPTNEJ3Bvc2l0aW9uOiBhYnNvbHV0ZTtsZWZ0OiAwOyB0 b3A6IC09CjEwMDA7Jz48L2Rpdj4iKS5hcHBlbmQoZykuYXBwZW5kVG8oImJvZHkiKTt2YXIgZT0z RGQucGFnZVgtaC53aWR0aCgpLzI7ZT0zRD0KTWF0aC5taW4oZSwkKGRvY3VtZW50KS5zY3JvbGxM ZWZ0KCkrJCh3aW5kb3cpLndpZHRoKCktJChoKS53aWR0aCgpLTUpO2U9M0RNPQphdGgubWF4KGUs JChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpKzUpO2guY3NzKHt0b3A6ZC5wYWdlWSxsZWZ0OmV9KX0s MTApO3NldFQ9CmltZW91dChmdW5jdGlvbigpe3ZhciBmPTNEZnVuY3Rpb24oaCl7JChoKS5iaW5k KCJjbGljay5jbG9zZV9wb3B1cCIsZnVuY3Rpbz0KbigpeyQoIi5wb3BtZW51LXdyYXBwZXIiKS5y ZW1vdmUoKTtoLnVuYmluZCgiY2xpY2suY2xvc2VfcG9wdXAiKX0pfTtmKCQod2luPQpkb3cuZG9j dW1lbnQpKTtmKCQod2luZG93LnRvcC5kb2N1bWVudCkpO2Zvcih2YXIgZT0zRHdpbmRvdy50b3Au ZnJhbWVzLmxlbmc9CnRoO2UtLTspe3ZhciBnPTNEJCh3aW5kb3cudG9wLmZyYW1lc1tlXS5kb2N1 bWVudCk7ZihnKX19LDUwKTtyZXR1cm4gZmFsc2V9KT0KfWZ1bmN0aW9uIG1ha2VfcG9wdXBfbWVu dXMoYSl7YT0zRGF8fGRvY3VtZW50OyQoYSkuZmluZCgiZGl2W3BvcHVwbWVudV0iKS5lPQphY2go ZnVuY3Rpb24oKXt2YXIgYj0zRHt9O3ZhciBkPTNEJCh0aGlzKTtkLmZpbmQoImEiKS5lYWNoKGZ1 bmN0aW9uKCl7dmFyIGc9Cj0zRCQodGhpcyksaT0zRGcuZ2V0KDApLGU9M0RpLmdldEF0dHJpYnV0 ZSgiY29uZmlybSIpLGY9M0RpLmdldEF0dHJpYnV0ZSgiaD0KcmVmIiksaD0zRGkuZ2V0QXR0cmli dXRlKCJ0YXJnZXQiKTtpZighZil7YltnLnRleHQoKV09M0RudWxsfWVsc2V7YltnLnRleHQoPQop XT0zRHt1cmw6ZixhY3Rpb246ZnVuY3Rpb24oKXtpZighZXx8Y29uZmlybShlKSl7aWYoaCl7d2lu ZG93Lm9wZW4oZixoKTtyZXQ9CnVybiBmYWxzZX1lbHNle2cuY2xpY2soKX19fX19fSk7dmFyIGM9 M0QkKGEpLmZpbmQoIiMiK2QuYXR0cigicG9wdXBtZW51IikpOz0KYy5maW5kKCJhIikuYmluZCgi Y2xpY2siLGZ1bmN0aW9uKGYpe2Yuc3RvcFByb3BhZ2F0aW9uKCk7cmV0dXJuIHRydWV9KTttYWtl PQpfcG9wdXBtZW51KGMsYik7Yy5hZGRDbGFzcygicG9wdXAiKTtkLnJlbW92ZSgpfSl9JC5mbi5y ZWZyZXNoX3NlbGVjdDI9M0RmdW49CmN0aW9uKCl7dmFyIGI9M0QkKHRoaXMpO3ZhciBhPTNEe3Bs YWNlaG9sZGVyOiJDbGljayB0byBzZWxlY3QiLGNsb3NlT25TZWxlYz0KdDohYi5pcygiW01VTFRJ UExFXSIpLGRyb3Bkb3duQXV0b1dpZHRoOnRydWUsY29udGFpbmVyQ3NzQ2xhc3M6InNlbGVjdDIt bWluPQp3aWR0aCJ9O3JldHVybiBiLnNlbGVjdDIoYSl9O2Z1bmN0aW9uIHJlcGxhY2VfYmlnX3Nl bGVjdF9pbnB1dHMoYSxjLGIpe2lmKCE9CmpRdWVyeS5mbi5zZWxlY3QyKXtyZXR1cm59aWYoYT0z RD0zRD0zRHVuZGVmaW5lZCl7YT0zRDIwfWlmKGM9M0Q9M0Q9M0R1bmRlZj0KaW5lZCl7Yz0zRDMw MDB9Yj0zRGJ8fCQoInNlbGVjdCIpO2IuZWFjaChmdW5jdGlvbigpe3ZhciBlPTNEJCh0aGlzKS5u b3QoIlttPQp1bHRpcGxlXSIpO3ZhciBkPTNEZS5maW5kKCJvcHRpb24iKS5sZW5ndGg7aWYoKGQ8 YSl8fChkPmMpKXtyZXR1cm59aWYoZS5oYXM9CkNsYXNzKCJuby1hdXRvY29tcGxldGUiKSl7cmV0 dXJufWUucmVmcmVzaF9zZWxlY3QyKCl9KX0kLmZuLm1ha2VfdGV4dF9lZGl0YT0KYmxlPTNEZnVu Y3Rpb24oZyl7dmFyIGQ9M0QoIm51bV9jb2xzIiBpbiBnP2cubnVtX2NvbHM6MzApLGM9M0QoIm51 bV9yb3dzIiBpPQpuIGc/Zy5udW1fcm93czo0KSxlPTNEKCJ1c2VfdGV4dGFyZWEiIGluIGc/Zy51 c2VfdGV4dGFyZWE6ZmFsc2UpLGI9M0QoIm9uX2Y9CmluaXNoIiBpbiBnP2cub25fZmluaXNoOm51 bGwpLGY9M0QoImhlbHBfdGV4dCIgaW4gZz9nLmhlbHBfdGV4dDpudWxsKTt2YXIgYT0KPTNEJCh0 aGlzKTthLmFkZENsYXNzKCJlZGl0YWJsZS10ZXh0IikuY2xpY2soZnVuY3Rpb24obCl7aWYoJCh0 aGlzKS5jaGlsZHJlPQpuKCI6aW5wdXQiKS5sZW5ndGg+MCl7cmV0dXJufWEucmVtb3ZlQ2xhc3Mo ImVkaXRhYmxlLXRleHQiKTt2YXIgaT0zRGZ1bmN0aW89Cm4obSl7YS5maW5kKCI6aW5wdXQiKS5y ZW1vdmUoKTtpZihtIT0zRD0zRCIiKXthLnRleHQobSl9ZWxzZXthLmh0bWwoIjxicj4iKT0KfWEu YWRkQ2xhc3MoImVkaXRhYmxlLXRleHQiKTtpZihiKXtiKG0pfX07dmFyIGg9M0QoImN1cl90ZXh0 IiBpbiBnP2cuY3VyX3RlPQp4dDphLnRleHQoKSksayxqO2lmKGUpe2s9M0QkKCI8dGV4dGFyZWEv PiIpLmF0dHIoe3Jvd3M6Yyxjb2xzOmR9KS50ZXh0KCQudHI9CmltKGgpKS5rZXl1cChmdW5jdGlv bihtKXtpZihtLmtleUNvZGU9M0Q9M0Q9M0QyNyl7aShoKX19KTtqPTNEJCgiPGJ1dHRvbi8+Ij0K KS50ZXh0KCJEb25lIikuY2xpY2soZnVuY3Rpb24oKXtpKGsudmFsKCkpO3JldHVybiBmYWxzZX0p fWVsc2V7az0zRCQoIjxpbnB1PQp0IHR5cGU9M0QndGV4dCcvPiIpLmF0dHIoe3ZhbHVlOiQudHJp bShoKSxzaXplOmR9KS5ibHVyKGZ1bmN0aW9uKCl7aShoKX0pLms9CmV5dXAoZnVuY3Rpb24obSl7 aWYobS5rZXlDb2RlPTNEPTNEPTNEMjcpeyQodGhpcykudHJpZ2dlcigiYmx1ciIpfWVsc2V7aWYo bT0KLmtleUNvZGU9M0Q9M0Q9M0QxMyl7aSgkKHRoaXMpLnZhbCgpKX19bS5zdG9wUHJvcGFnYXRp b24oKX0pfWEudGV4dCgiIik7YS5hPQpwcGVuZChrKTtpZihqKXthLmFwcGVuZChqKX1rLmZvY3Vz KCk7ay5zZWxlY3QoKTtsLnN0b3BQcm9wYWdhdGlvbigpfSk7aWYoZik9CnthLmF0dHIoInRpdGxl IixmKS50b29sdGlwKCl9cmV0dXJuIGF9O2Z1bmN0aW9uIGFzeW5jX3NhdmVfdGV4dChkLGYsZSxh LGMsaD0KLGksZyxiKXtpZihjPTNEPTNEPTNEdW5kZWZpbmVkKXtjPTNEMzB9aWYoaT0zRD0zRD0z RHVuZGVmaW5lZCl7aT0zRDR9JCgiIyIrPQpkKS5jbGljayhmdW5jdGlvbigpe2lmKCQoIiNyZW5h bWluZy1hY3RpdmUiKS5sZW5ndGg+MCl7cmV0dXJufXZhciBsPTNEJCgiIyI9CitmKSxrPTNEbC50 ZXh0KCksajtpZihoKXtqPTNEJCgiPHRleHRhcmVhPjwvdGV4dGFyZWE+IikuYXR0cih7cm93czpp LGNvbHM6Yz0KfSkudGV4dCgkLnRyaW0oaykpfWVsc2V7aj0zRCQoIjxpbnB1dCB0eXBlPTNEJ3Rl eHQnPjwvaW5wdXQ+IikuYXR0cih7dmFsdWU6PQokLnRyaW0oayksc2l6ZTpjfSl9ai5hdHRyKCJp ZCIsInJlbmFtaW5nLWFjdGl2ZSIpO2ouYmx1cihmdW5jdGlvbigpeyQodGhpcyk9Ci5yZW1vdmUo KTtsLnNob3coKTtpZihiKXtiKGopfX0pO2oua2V5dXAoZnVuY3Rpb24obil7aWYobi5rZXlDb2Rl PTNEPTNEPTNEMj0KNyl7JCh0aGlzKS50cmlnZ2VyKCJibHVyIil9ZWxzZXtpZihuLmtleUNvZGU9 M0Q9M0Q9M0QxMyl7dmFyIG09M0R7fTttW2FdPTNEPQokKHRoaXMpLnZhbCgpOyQodGhpcykudHJp Z2dlcigiYmx1ciIpOyQuYWpheCh7dXJsOmUsZGF0YTptLGVycm9yOmZ1bmN0aW9uKCk9CnthbGVy dCgiVGV4dCBlZGl0aW5nIGZvciBlbHQgIitmKyIgZmFpbGVkIil9LHN1Y2Nlc3M6ZnVuY3Rpb24o byl7aWYobyE9M0Q9Cj0zRCIiKXtsLnRleHQobyl9ZWxzZXtsLmh0bWwoIjxlbT5Ob25lPC9lbT4i KX1pZihiKXtiKGopfX19KX19fSk7aWYoZyl7ZyhqKT0KfWwuaGlkZSgpO2ouaW5zZXJ0QWZ0ZXIo bCk7ai5mb2N1cygpO2ouc2VsZWN0KCk7cmV0dXJufSl9ZnVuY3Rpb24gY29tbWF0aXplPQooYil7 Yis9M0QiIjt2YXIgYT0zRC8oXGQrKShcZHszfSkvO3doaWxlKGEudGVzdChiKSl7Yj0zRGIucmVw bGFjZShhLCIkMSwkMiI9Cil9cmV0dXJuIGJ9ZnVuY3Rpb24gcmVzZXRfdG9vbF9zZWFyY2goYSl7 dmFyIGM9M0QkKCIjZ2FsYXh5X3Rvb2xzIikuY29udGVudD0KcygpO2lmKGMubGVuZ3RoPTNEPTNE PTNEMCl7Yz0zRCQoZG9jdW1lbnQpfSQodGhpcykucmVtb3ZlQ2xhc3MoInNlYXJjaF9hY3RpPQp2 ZSIpO2MuZmluZCgiLnRvb2xUaXRsZSIpLnJlbW92ZUNsYXNzKCJzZWFyY2hfbWF0Y2giKTtjLmZp bmQoIi50b29sU2VjdGlvbkI9Cm9keSIpLmhpZGUoKTtjLmZpbmQoIi50b29sVGl0bGUiKS5zaG93 KCk7Yy5maW5kKCIudG9vbFBhbmVsTGFiZWwiKS5zaG93KCk7Yz0KLmZpbmQoIi50b29sU2VjdGlv bldyYXBwZXIiKS5lYWNoKGZ1bmN0aW9uKCl7aWYoJCh0aGlzKS5hdHRyKCJpZCIpIT0zRD0zRCJy PQplY2VudGx5X3VzZWRfd3JhcHBlciIpeyQodGhpcykuc2hvdygpfWVsc2V7aWYoJCh0aGlzKS5o YXNDbGFzcygidXNlcl9wcmVmX3Y9CmlzaWJsZSIpKXskKHRoaXMpLnNob3coKX19fSk7Yy5maW5k KCIjc2VhcmNoLW5vLXJlc3VsdHMiKS5oaWRlKCk7Yy5maW5kKCIjcz0KZWFyY2gtc3Bpbm5lciIp LmhpZGUoKTtpZihhKXt2YXIgYj0zRGMuZmluZCgiI3Rvb2wtc2VhcmNoLXF1ZXJ5Iik7Yi52YWwo InNlPQphcmNoIHRvb2xzIil9fXZhciBHYWxheHlBc3luYz0zRGZ1bmN0aW9uKGEpe3RoaXMudXJs X2RpY3Q9M0R7fTt0aGlzLmxvZ19hY3Q9Cmlvbj0zRChhPTNEPTNEPTNEdW5kZWZpbmVkP2ZhbHNl OmEpfTtHYWxheHlBc3luYy5wcm90b3R5cGUuc2V0X2Z1bmNfdXJsPTNEZj0KdW5jdGlvbihhLGIp e3RoaXMudXJsX2RpY3RbYV09M0RifTtHYWxheHlBc3luYy5wcm90b3R5cGUuc2V0X3VzZXJfcHJl Zj0zRGZ1PQpuY3Rpb24oYSxiKXt2YXIgYz0zRHRoaXMudXJsX2RpY3RbYXJndW1lbnRzLmNhbGxl ZV07aWYoYz0zRD0zRD0zRHVuZGVmaW5lZCk9CntyZXR1cm4gZmFsc2V9JC5hamF4KHt1cmw6Yyxk YXRhOntwcmVmX25hbWU6YSxwcmVmX3ZhbHVlOmJ9LGVycm9yOmZ1bmN0aW9uKD0KKXtyZXR1cm4g ZmFsc2V9LHN1Y2Nlc3M6ZnVuY3Rpb24oKXtyZXR1cm4gdHJ1ZX19KX07R2FsYXh5QXN5bmMucHJv dG90eXBlLmxvPQpnX3VzZXJfYWN0aW9uPTNEZnVuY3Rpb24oYyxiLGQpe2lmKCF0aGlzLmxvZ19h Y3Rpb24pe3JldHVybn12YXIgYT0zRHRoaXMudXI9CmxfZGljdFthcmd1bWVudHMuY2FsbGVlXTtp ZihhPTNEPTNEPTNEdW5kZWZpbmVkKXtyZXR1cm4gZmFsc2V9JC5hamF4KHt1cmw6YT0KLGRhdGE6 e2FjdGlvbjpjLGNvbnRleHQ6YixwYXJhbXM6ZH0sZXJyb3I6ZnVuY3Rpb24oKXtyZXR1cm4gZmFs c2V9LHN1Y2Nlc3M6PQpmdW5jdGlvbigpe3JldHVybiB0cnVlfX0pfTtmdW5jdGlvbiBpbml0X3Jl ZnJlc2hfb25fY2hhbmdlKCl7JCgic2VsZWN0W3JlZnI9CmVzaF9vbl9jaGFuZ2U9M0QndHJ1ZSdd Iikub2ZmKCJjaGFuZ2UiKS5jaGFuZ2UoZnVuY3Rpb24oKXt2YXIgYT0zRCQodGhpcyksZT0KPTNE YS52YWwoKSxkPTNEZmFsc2UsYz0zRGEuYXR0cigicmVmcmVzaF9vbl9jaGFuZ2VfdmFsdWVzIik7 aWYoYyl7Yz0zRGMuc3BsPQppdCgiLCIpO3ZhciBiPTNEYS5hdHRyKCJsYXN0X3NlbGVjdGVkX3Zh bHVlIik7aWYoJC5pbkFycmF5KGUsYyk9M0Q9M0Q9M0QtMSY9CiYkLmluQXJyYXkoYixjKT0zRD0z RD0zRC0xKXtyZXR1cm59fSQod2luZG93KS50cmlnZ2VyKCJyZWZyZXNoX29uX2NoYW5nZSIpOz0K JChkb2N1bWVudCkudHJpZ2dlcigiY29udmVydF90b192YWx1ZXMiKTthLmdldCgwKS5mb3JtLnN1 Ym1pdCgpfSk7JCgiOmNoZWNrPQpib3hbcmVmcmVzaF9vbl9jaGFuZ2U9M0QndHJ1ZSddIikub2Zm KCJjbGljayIpLmNsaWNrKGZ1bmN0aW9uKCl7dmFyIGE9M0QkKHQ9CmhpcyksZT0zRGEudmFsKCks ZD0zRGZhbHNlLGM9M0RhLmF0dHIoInJlZnJlc2hfb25fY2hhbmdlX3ZhbHVlcyIpO2lmKGMpe2M9 Cj0zRGMuc3BsaXQoIiwiKTt2YXIgYj0zRGEuYXR0cigibGFzdF9zZWxlY3RlZF92YWx1ZSIpO2lm KCQuaW5BcnJheShlLGMpPTNEPQo9M0Q9M0QtMSYmJC5pbkFycmF5KGIsYyk9M0Q9M0Q9M0QtMSl7 cmV0dXJufX0kKHdpbmRvdykudHJpZ2dlcigicmVmcmVzaF9vbl89CmNoYW5nZSIpO2EuZ2V0KDAp LmZvcm0uc3VibWl0KCl9KTskKCJhW2NvbmZpcm1dIikub2ZmKCJjbGljayIpLmNsaWNrKGZ1bmN0 aT0Kb24oKXtyZXR1cm4gY29uZmlybSgkKHRoaXMpLmF0dHIoImNvbmZpcm0iKSl9KX1qUXVlcnku Zm4ucHJldmVudERvdWJsZVN1Ym1pPQpzc2lvbj0zRGZ1bmN0aW9uKCl7JCh0aGlzKS5vbigic3Vi bWl0IixmdW5jdGlvbihiKXt2YXIgYT0zRCQodGhpcyk7aWYoYS5kYXQ9CmEoInN1Ym1pdHRlZCIp PTNEPTNEPTNEdHJ1ZSl7Yi5wcmV2ZW50RGVmYXVsdCgpfWVsc2V7YS5kYXRhKCJzdWJtaXR0ZWQi LHRydT0KZSl9fSk7cmV0dXJuIHRoaXN9OyQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7aW5p dF9yZWZyZXNoX29uX2NoYW5nZSgpO2lmPQooJC5mbi50b29sdGlwKXskKCIudW5pZmllZC1wYW5l bC1oZWFkZXIgW3RpdGxlXSIpLnRvb2x0aXAoe3BsYWNlbWVudDoiYm90dG89Cm0ifSk7JCgiW3Rp dGxlXSIpLnRvb2x0aXAoKX1tYWtlX3BvcHVwX21lbnVzKCk7cmVwbGFjZV9iaWdfc2VsZWN0X2lu cHV0cygyMD0KLDE1MDApOyQoImEiKS5jbGljayhmdW5jdGlvbigpe3ZhciBiPTNEJCh0aGlzKTt2 YXIgYz0zRChwYXJlbnQuZnJhbWVzJiZwYXJlPQpudC5mcmFtZXMuZ2FsYXh5X21haW4pO2lmKChi LmF0dHIoInRhcmdldCIpPTNEPTNEImdhbGF4eV9tYWluIikmJighYykpe3ZhciA9CmE9M0RiLmF0 dHIoImhyZWYiKTtpZihhLmluZGV4T2YoIj8iKT0zRD0zRC0xKXthKz0zRCI/In1lbHNle2ErPTNE IiYifWErPTNEIj0KdXNlX3BhbmVscz0zRFRydWUiO2IuYXR0cigiaHJlZiIsYSk7Yi5hdHRyKCJ0 YXJnZXQiLCJfc2VsZiIpfXJldHVybiBifSl9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl CisoZnVuY3Rpb24oKXt2YXIgYj0zRDA7dmFyIGM9M0RbIm1zIiwibW96Iiwid2Via2l0IiwibyJd O2Zvcih2YXIgYT0zRDA7YTxjLj0KbGVuZ3RoJiYhd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFt ZTsrK2Epe3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9M0R3PQppbmRvd1tjW2FdKyJSZXF1 ZXN0QW5pbWF0aW9uRnJhbWUiXTt3aW5kb3cuY2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lPTNE d2k9Cm5kb3dbY1thXSsiQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lIl19aWYoIXdpbmRvdy5y ZXF1ZXN0QW5pbWF0aW9uRnJhbWUpez0Kd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT0zRGZ1 bmN0aW9uKGgsZSl7dmFyIGQ9M0RuZXcgRGF0ZSgpLmdldFRpbWUoKTt2PQphciBmPTNETWF0aC5t YXgoMCwxNi0oZC1iKSk7dmFyIGc9M0R3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2goZCtm KX0sZik9CjtiPTNEZCtmO3JldHVybiBnfX1pZighd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1l KXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRj0KcmFtZT0zRGZ1bmN0aW9uKGQpe2NsZWFyVGltZW91 dChkKX19fSgpKTtpZighQXJyYXkuaW5kZXhPZil7QXJyYXkucHJvdG90eXBlPQouaW5kZXhPZj0z RGZ1bmN0aW9uKGMpe2Zvcih2YXIgYj0zRDAsYT0zRHRoaXMubGVuZ3RoO2I8YTtiKyspe2lmKHRo aXNbYl09M0Q9Cj0zRGMpe3JldHVybiBifX1yZXR1cm4gLTF9fWZ1bmN0aW9uIG9ial9sZW5ndGgo Yyl7aWYoYy5sZW5ndGghPTNEPTNEdW5kZWZpbj0KZWQpe3JldHVybiBjLmxlbmd0aH12YXIgYj0z RDA7Zm9yKHZhciBhIGluIGMpe2IrK31yZXR1cm4gYn0kLmZuLm1ha2VBYnNvbHV0PQplPTNEZnVu Y3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPTNEJCh0aGlzKTt2YXIg Yz0zRGIucG9zaXQ9CmlvbigpO2IuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLG1hcmdpbkxlZnQ6 MCxtYXJnaW5Ub3A6MCx0b3A6Yy50b3AsbGVmdDpjLj0KbGVmdCxyaWdodDokKHdpbmRvdykud2lk dGgoKS0oYy5sZWZ0K2Iud2lkdGgoKSl9KTtpZihhKXtiLnJlbW92ZSgpLmFwcGVuZFRvPQooImJv ZHkiKX19KX07ZnVuY3Rpb24gbWFrZV9wb3B1cG1lbnUoYixjKXt2YXIgYT0zRChiLmRhdGEoIm1l bnVfb3B0aW9ucyIpKTs9CmIuZGF0YSgibWVudV9vcHRpb25zIixjKTtpZihhKXtyZXR1cm59Yi5i aW5kKCJjbGljay5zaG93X3BvcHVwIixmdW5jdGlvbihkKT0KeyQoIi5wb3BtZW51LXdyYXBwZXIi KS5yZW1vdmUoKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGc9M0QkKCI8dWwgY2xhc3M9Cj0z RCdkcm9wZG93bi1tZW51JyBpZD0zRCciK2IuYXR0cigiaWQiKSsiLW1lbnUnPjwvdWw+Iik7dmFy IGY9M0RiLmRhdGEoIm1lbj0KdV9vcHRpb25zIik7aWYob2JqX2xlbmd0aChmKTw9M0QwKXskKCI8 bGk+Tm8gT3B0aW9ucy48L2xpPiIpLmFwcGVuZFRvKGcpfSQuPQplYWNoKGYsZnVuY3Rpb24oaixp KXtpZihpKXt2YXIgbD0zRGkuYWN0aW9ufHxpO2cuYXBwZW5kKCQoIjxsaT48L2xpPiIpLmFwcGU9 Cm5kKCQoIjxhPiIpLmF0dHIoImhyZWYiLGkudXJsKS5odG1sKGopLmNsaWNrKGwpKSl9ZWxzZXtn LmFwcGVuZCgkKCI8bGk+PC9saT0KPiIpLmFkZENsYXNzKCJoZWFkIikuYXBwZW5kKCQoIjxhIGhy ZWY9M0QnIyc+PC9hPiIpLmh0bWwoaikpKX19KTt2YXIgaD0zRCQoPQoiPGRpdiBjbGFzcz0zRCdw b3BtZW51LXdyYXBwZXInIHN0eWxlPTNEJ3Bvc2l0aW9uOiBhYnNvbHV0ZTtsZWZ0OiAwOyB0b3A6 IC09CjEwMDA7Jz48L2Rpdj4iKS5hcHBlbmQoZykuYXBwZW5kVG8oImJvZHkiKTt2YXIgZT0zRGQu cGFnZVgtaC53aWR0aCgpLzI7ZT0zRD0KTWF0aC5taW4oZSwkKGRvY3VtZW50KS5zY3JvbGxMZWZ0 KCkrJCh3aW5kb3cpLndpZHRoKCktJChoKS53aWR0aCgpLTUpO2U9M0RNPQphdGgubWF4KGUsJChk b2N1bWVudCkuc2Nyb2xsTGVmdCgpKzUpO2guY3NzKHt0b3A6ZC5wYWdlWSxsZWZ0OmV9KX0sMTAp O3NldFQ9CmltZW91dChmdW5jdGlvbigpe3ZhciBmPTNEZnVuY3Rpb24oaCl7JChoKS5iaW5kKCJj bGljay5jbG9zZV9wb3B1cCIsZnVuY3Rpbz0KbigpeyQoIi5wb3BtZW51LXdyYXBwZXIiKS5yZW1v dmUoKTtoLnVuYmluZCgiY2xpY2suY2xvc2VfcG9wdXAiKX0pfTtmKCQod2luPQpkb3cuZG9jdW1l bnQpKTtmKCQod2luZG93LnRvcC5kb2N1bWVudCkpO2Zvcih2YXIgZT0zRHdpbmRvdy50b3AuZnJh bWVzLmxlbmc9CnRoO2UtLTspe3ZhciBnPTNEJCh3aW5kb3cudG9wLmZyYW1lc1tlXS5kb2N1bWVu dCk7ZihnKX19LDUwKTtyZXR1cm4gZmFsc2V9KT0KfWZ1bmN0aW9uIG1ha2VfcG9wdXBfbWVudXMo YSl7YT0zRGF8fGRvY3VtZW50OyQoYSkuZmluZCgiZGl2W3BvcHVwbWVudV0iKS5lPQphY2goZnVu Y3Rpb24oKXt2YXIgYj0zRHt9O3ZhciBkPTNEJCh0aGlzKTtkLmZpbmQoImEiKS5lYWNoKGZ1bmN0 aW9uKCl7dmFyIGc9Cj0zRCQodGhpcyksaT0zRGcuZ2V0KDApLGU9M0RpLmdldEF0dHJpYnV0ZSgi Y29uZmlybSIpLGY9M0RpLmdldEF0dHJpYnV0ZSgiaD0KcmVmIiksaD0zRGkuZ2V0QXR0cmlidXRl KCJ0YXJnZXQiKTtpZighZil7YltnLnRleHQoKV09M0RudWxsfWVsc2V7YltnLnRleHQoPQopXT0z RHt1cmw6ZixhY3Rpb246ZnVuY3Rpb24oail7aWYoIWV8fGNvbmZpcm0oZSkpe2lmKGgpe3dpbmRv dy5vcGVuKGYsaCk7cmU9CnR1cm4gZmFsc2V9ZWxzZXtnLmNsaWNrKCl9fWVsc2V7ai5wcmV2ZW50 RGVmYXVsdCgpfX19fX0pO3ZhciBjPTNEJChhKS5maW5kKD0KIiMiK2QuYXR0cigicG9wdXBtZW51 IikpO2MuZmluZCgiYSIpLmJpbmQoImNsaWNrIixmdW5jdGlvbihmKXtmLnN0b3BQcm9wYWdhPQp0 aW9uKCk7cmV0dXJuIHRydWV9KTttYWtlX3BvcHVwbWVudShjLGIpO2MuYWRkQ2xhc3MoInBvcHVw Iik7ZC5yZW1vdmUoKX0pfSQ9Ci5mbi5yZWZyZXNoX3NlbGVjdDI9M0RmdW5jdGlvbigpe3ZhciBi PTNEJCh0aGlzKTt2YXIgYT0zRHtwbGFjZWhvbGRlcjoiQ2xpYz0KayB0byBzZWxlY3QiLGNsb3Nl T25TZWxlY3Q6IWIuaXMoIltNVUxUSVBMRV0iKSxkcm9wZG93bkF1dG9XaWR0aDp0cnVlLGNvbnRh PQppbmVyQ3NzQ2xhc3M6InNlbGVjdDItbWlud2lkdGgifTtyZXR1cm4gYi5zZWxlY3QyKGEpfTtm dW5jdGlvbiByZXBsYWNlX2JpZ189CnNlbGVjdF9pbnB1dHMoYSxjLGIpe2lmKCFqUXVlcnkuZm4u c2VsZWN0Mil7cmV0dXJufWlmKGE9M0Q9M0Q9M0R1bmRlZmluZWQpez0KYT0zRDIwfWlmKGM9M0Q9 M0Q9M0R1bmRlZmluZWQpe2M9M0QzMDAwfWI9M0RifHwkKCJzZWxlY3QiKTtiLmVhY2goZnVuY3Rp b24oPQope3ZhciBlPTNEJCh0aGlzKS5ub3QoIlttdWx0aXBsZV0iKTt2YXIgZD0zRGUuZmluZCgi b3B0aW9uIikubGVuZ3RoO2lmKChkPGE9Cil8fChkPmMpKXtyZXR1cm59aWYoZS5oYXNDbGFzcygi bm8tYXV0b2NvbXBsZXRlIikpe3JldHVybn1lLnJlZnJlc2hfc2VsZWN0Mj0KKCl9KX0kLmZuLm1h a2VfdGV4dF9lZGl0YWJsZT0zRGZ1bmN0aW9uKGcpe3ZhciBkPTNEKCJudW1fY29scyIgaW4gZz9n Lm51bV9jPQpvbHM6MzApLGM9M0QoIm51bV9yb3dzIiBpbiBnP2cubnVtX3Jvd3M6NCksZT0zRCgi dXNlX3RleHRhcmVhIiBpbiBnP2cudXNlX3Q9CmV4dGFyZWE6ZmFsc2UpLGI9M0QoIm9uX2Zpbmlz aCIgaW4gZz9nLm9uX2ZpbmlzaDpudWxsKSxmPTNEKCJoZWxwX3RleHQiIGluID0KZz9nLmhlbHBf dGV4dDpudWxsKTt2YXIgYT0zRCQodGhpcyk7YS5hZGRDbGFzcygiZWRpdGFibGUtdGV4dCIpLmNs aWNrKGZ1bmN0PQppb24obCl7aWYoJCh0aGlzKS5jaGlsZHJlbigiOmlucHV0IikubGVuZ3RoPjAp e3JldHVybn1hLnJlbW92ZUNsYXNzKCJlZGl0YWI9CmxlLXRleHQiKTt2YXIgaT0zRGZ1bmN0aW9u KG0pe2EuZmluZCgiOmlucHV0IikucmVtb3ZlKCk7aWYobSE9M0Q9M0QiIil7YS50ZT0KeHQobSl9 ZWxzZXthLmh0bWwoIjxicj4iKX1hLmFkZENsYXNzKCJlZGl0YWJsZS10ZXh0Iik7aWYoYil7Yiht KX19O3ZhciBoPTNEPQooImN1cl90ZXh0IiBpbiBnP2cuY3VyX3RleHQ6YS50ZXh0KCkpLGssajtp ZihlKXtrPTNEJCgiPHRleHRhcmVhLz4iKS5hdHRyKHs9CnJvd3M6Yyxjb2xzOmR9KS50ZXh0KCQu dHJpbShoKSkua2V5dXAoZnVuY3Rpb24obSl7aWYobS5rZXlDb2RlPTNEPTNEPTNEMjcpez0KaSho KX19KTtqPTNEJCgiPGJ1dHRvbi8+IikudGV4dCgiRG9uZSIpLmNsaWNrKGZ1bmN0aW9uKCl7aShr LnZhbCgpKTtyZXR1cm4gPQpmYWxzZX0pfWVsc2V7az0zRCQoIjxpbnB1dCB0eXBlPTNEJ3RleHQn Lz4iKS5hdHRyKHt2YWx1ZTokLnRyaW0oaCksc2l6ZTpkfSk9Ci5ibHVyKGZ1bmN0aW9uKCl7aSho KX0pLmtleXVwKGZ1bmN0aW9uKG0pe2lmKG0ua2V5Q29kZT0zRD0zRD0zRDI3KXskKHRoaXMpLj0K dHJpZ2dlcigiYmx1ciIpfWVsc2V7aWYobS5rZXlDb2RlPTNEPTNEPTNEMTMpe2koJCh0aGlzKS52 YWwoKSl9fW0uc3RvcFByb3BhPQpnYXRpb24oKX0pfWEudGV4dCgiIik7YS5hcHBlbmQoayk7aWYo ail7YS5hcHBlbmQoail9ay5mb2N1cygpO2suc2VsZWN0KCk7bC49CnN0b3BQcm9wYWdhdGlvbigp fSk7aWYoZil7YS5hdHRyKCJ0aXRsZSIsZikudG9vbHRpcCgpfXJldHVybiBhfTtmdW5jdGlvbiBh cz0KeW5jX3NhdmVfdGV4dChkLGYsZSxhLGMsaCxpLGcsYil7aWYoYz0zRD0zRD0zRHVuZGVmaW5l ZCl7Yz0zRDMwfWlmKGk9M0Q9M0Q9Cj0zRHVuZGVmaW5lZCl7aT0zRDR9JCgiIyIrZCkuY2xpY2so ZnVuY3Rpb24oKXtpZigkKCIjcmVuYW1pbmctYWN0aXZlIikubGVuZz0KdGg+MCl7cmV0dXJufXZh ciBsPTNEJCgiIyIrZiksaz0zRGwudGV4dCgpLGo7aWYoaCl7aj0zRCQoIjx0ZXh0YXJlYT48L3Rl eHRhPQpyZWE+IikuYXR0cih7cm93czppLGNvbHM6Y30pLnRleHQoJC50cmltKGspKX1lbHNle2o9 M0QkKCI8aW5wdXQgdHlwZT0zRCd0ZXg9CnQnPjwvaW5wdXQ+IikuYXR0cih7dmFsdWU6JC50cmlt KGspLHNpemU6Y30pfWouYXR0cigiaWQiLCJyZW5hbWluZy1hY3RpdmUiKT0KO2ouYmx1cihmdW5j dGlvbigpeyQodGhpcykucmVtb3ZlKCk7bC5zaG93KCk7aWYoYil7YihqKX19KTtqLmtleXVwKGZ1 bmN0aW9uPQoobil7aWYobi5rZXlDb2RlPTNEPTNEPTNEMjcpeyQodGhpcykudHJpZ2dlcigiYmx1 ciIpfWVsc2V7aWYobi5rZXlDb2RlPTNEPQo9M0Q9M0QxMyl7dmFyIG09M0R7fTttW2FdPTNEJCh0 aGlzKS52YWwoKTskKHRoaXMpLnRyaWdnZXIoImJsdXIiKTskLmFqYXgoe3U9CnJsOmUsZGF0YTpt LGVycm9yOmZ1bmN0aW9uKCl7YWxlcnQoIlRleHQgZWRpdGluZyBmb3IgZWx0ICIrZisiIGZhaWxl ZCIpfSxzdT0KY2Nlc3M6ZnVuY3Rpb24obyl7aWYobyE9M0Q9M0QiIil7bC50ZXh0KG8pfWVsc2V7 bC5odG1sKCI8ZW0+Tm9uZTwvZW0+Iil9aWYoPQpiKXtiKGopfX19KX19fSk7aWYoZyl7ZyhqKX1s LmhpZGUoKTtqLmluc2VydEFmdGVyKGwpO2ouZm9jdXMoKTtqLnNlbGVjdCgpO3I9CmV0dXJufSl9 ZnVuY3Rpb24gY29tbWF0aXplKGIpe2IrPTNEIiI7dmFyIGE9M0QvKFxkKykoXGR7M30pLzt3aGls ZShhLnRlc3QoYj0KKSl7Yj0zRGIucmVwbGFjZShhLCIkMSwkMiIpfXJldHVybiBifWZ1bmN0aW9u IHJlc2V0X3Rvb2xfc2VhcmNoKGEpe3ZhciBjPTNEPQokKCIjZ2FsYXh5X3Rvb2xzIikuY29udGVu dHMoKTtpZihjLmxlbmd0aD0zRD0zRD0zRDApe2M9M0QkKGRvY3VtZW50KX0kKHRoaXM9CikucmVt b3ZlQ2xhc3MoInNlYXJjaF9hY3RpdmUiKTtjLmZpbmQoIi50b29sVGl0bGUiKS5yZW1vdmVDbGFz cygic2VhcmNoX21hdD0KY2giKTtjLmZpbmQoIi50b29sU2VjdGlvbkJvZHkiKS5oaWRlKCk7Yy5m aW5kKCIudG9vbFRpdGxlIikuc2hvdygpO2MuZmluZCgiPQoudG9vbFBhbmVsTGFiZWwiKS5zaG93 KCk7Yy5maW5kKCIudG9vbFNlY3Rpb25XcmFwcGVyIikuZWFjaChmdW5jdGlvbigpe2lmKCQ9Cih0 aGlzKS5hdHRyKCJpZCIpIT0zRD0zRCJyZWNlbnRseV91c2VkX3dyYXBwZXIiKXskKHRoaXMpLnNo b3coKX1lbHNle2lmKCQodD0KaGlzKS5oYXNDbGFzcygidXNlcl9wcmVmX3Zpc2libGUiKSl7JCh0 aGlzKS5zaG93KCl9fX0pO2MuZmluZCgiI3NlYXJjaC1uby1yPQplc3VsdHMiKS5oaWRlKCk7Yy5m aW5kKCIjc2VhcmNoLXNwaW5uZXIiKS5oaWRlKCk7aWYoYSl7dmFyIGI9M0RjLmZpbmQoIiN0b289 Cmwtc2VhcmNoLXF1ZXJ5Iik7Yi52YWwoInNlYXJjaCB0b29scyIpfX12YXIgR2FsYXh5QXN5bmM9 M0RmdW5jdGlvbihhKXt0aGlzLj0KdXJsX2RpY3Q9M0R7fTt0aGlzLmxvZ19hY3Rpb249M0QoYT0z RD0zRD0zRHVuZGVmaW5lZD9mYWxzZTphKX07R2FsYXh5QXN5bmMuPQpwcm90b3R5cGUuc2V0X2Z1 bmNfdXJsPTNEZnVuY3Rpb24oYSxiKXt0aGlzLnVybF9kaWN0W2FdPTNEYn07R2FsYXh5QXN5bmMu cHI9Cm90b3R5cGUuc2V0X3VzZXJfcHJlZj0zRGZ1bmN0aW9uKGEsYil7dmFyIGM9M0R0aGlzLnVy bF9kaWN0W2FyZ3VtZW50cy5jYWxsZT0KZV07aWYoYz0zRD0zRD0zRHVuZGVmaW5lZCl7cmV0dXJu IGZhbHNlfSQuYWpheCh7dXJsOmMsZGF0YTp7cHJlZl9uYW1lOmEscHJlPQpmX3ZhbHVlOmJ9LGVy cm9yOmZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlfSxzdWNjZXNzOmZ1bmN0aW9uKCl7cmV0dXJuIHRy dWV9fSk9Cn07R2FsYXh5QXN5bmMucHJvdG90eXBlLmxvZ191c2VyX2FjdGlvbj0zRGZ1bmN0aW9u KGMsYixkKXtpZighdGhpcy5sb2dfYWN0aT0Kb24pe3JldHVybn12YXIgYT0zRHRoaXMudXJsX2Rp Y3RbYXJndW1lbnRzLmNhbGxlZV07aWYoYT0zRD0zRD0zRHVuZGVmaW5lZCl7PQpyZXR1cm4gZmFs c2V9JC5hamF4KHt1cmw6YSxkYXRhOnthY3Rpb246Yyxjb250ZXh0OmIscGFyYW1zOmR9LGVycm9y OmZ1bmN0aW89Cm4oKXtyZXR1cm4gZmFsc2V9LHN1Y2Nlc3M6ZnVuY3Rpb24oKXtyZXR1cm4gdHJ1 ZX19KX07ZnVuY3Rpb24gaW5pdF9yZWZyZXNoXz0Kb25fY2hhbmdlKCl7JCgic2VsZWN0W3JlZnJl c2hfb25fY2hhbmdlPTNEJ3RydWUnXSIpLm9mZigiY2hhbmdlIikuY2hhbmdlKGZ1PQpuY3Rpb24o KXt2YXIgYT0zRCQodGhpcyksZT0zRGEudmFsKCksZD0zRGZhbHNlLGM9M0RhLmF0dHIoInJlZnJl c2hfb25fY2hhbmc9CmVfdmFsdWVzIik7aWYoYyl7Yz0zRGMuc3BsaXQoIiwiKTt2YXIgYj0zRGEu YXR0cigibGFzdF9zZWxlY3RlZF92YWx1ZSIpO2lmKD0KJC5pbkFycmF5KGUsYyk9M0Q9M0Q9M0Qt MSYmJC5pbkFycmF5KGIsYyk9M0Q9M0Q9M0QtMSl7cmV0dXJufX0kKHdpbmRvdykudHJpPQpnZ2Vy KCJyZWZyZXNoX29uX2NoYW5nZSIpOyQoZG9jdW1lbnQpLnRyaWdnZXIoImNvbnZlcnRfdG9fdmFs dWVzIik7YS5nZXQoMCk9Ci5mb3JtLnN1Ym1pdCgpfSk7JCgiOmNoZWNrYm94W3JlZnJlc2hfb25f Y2hhbmdlPTNEJ3RydWUnXSIpLm9mZigiY2xpY2siKS5jbD0KaWNrKGZ1bmN0aW9uKCl7dmFyIGE9 M0QkKHRoaXMpLGU9M0RhLnZhbCgpLGQ9M0RmYWxzZSxjPTNEYS5hdHRyKCJyZWZyZXNoX29uPQpf Y2hhbmdlX3ZhbHVlcyIpO2lmKGMpe2M9M0RjLnNwbGl0KCIsIik7dmFyIGI9M0RhLmF0dHIoImxh c3Rfc2VsZWN0ZWRfdmFsdWU9CiIpO2lmKCQuaW5BcnJheShlLGMpPTNEPTNEPTNELTEmJiQuaW5B cnJheShiLGMpPTNEPTNEPTNELTEpe3JldHVybn19JCh3aW5kbz0KdykudHJpZ2dlcigicmVmcmVz aF9vbl9jaGFuZ2UiKTthLmdldCgwKS5mb3JtLnN1Ym1pdCgpfSk7JCgiYVtjb25maXJtXSIpLm9m PQpmKCJjbGljayIpLmNsaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIGNvbmZpcm0oJCh0aGlzKS5hdHRy KCJjb25maXJtIikpfSl9alF1ZXI9CnkuZm4ucHJldmVudERvdWJsZVN1Ym1pc3Npb249M0RmdW5j dGlvbigpeyQodGhpcykub24oInN1Ym1pdCIsZnVuY3Rpb24oYil7dj0KYXIgYT0zRCQodGhpcyk7 aWYoYS5kYXRhKCJzdWJtaXR0ZWQiKT0zRD0zRD0zRHRydWUpe2IucHJldmVudERlZmF1bHQoKX1l bHNlPQp7YS5kYXRhKCJzdWJtaXR0ZWQiLHRydWUpfX0pO3JldHVybiB0aGlzfTskKGRvY3VtZW50 KS5yZWFkeShmdW5jdGlvbigpe2luaXQ9Cl9yZWZyZXNoX29uX2NoYW5nZSgpO2lmKCQuZm4udG9v bHRpcCl7JCgiLnVuaWZpZWQtcGFuZWwtaGVhZGVyIFt0aXRsZV0iKS50bz0Kb2x0aXAoe3BsYWNl bWVudDoiYm90dG9tIn0pOyQoIlt0aXRsZV0iKS50b29sdGlwKCl9bWFrZV9wb3B1cF9tZW51cygp O3JlcGxhPQpjZV9iaWdfc2VsZWN0X2lucHV0cygyMCwxNTAwKTskKCJhIikuY2xpY2soZnVuY3Rp b24oKXt2YXIgYj0zRCQodGhpcyk7dmFyIGM9Cj0zRChwYXJlbnQuZnJhbWVzJiZwYXJlbnQuZnJh bWVzLmdhbGF4eV9tYWluKTtpZigoYi5hdHRyKCJ0YXJnZXQiKT0zRD0zRCJnYT0KbGF4eV9tYWlu IikmJighYykpe3ZhciBhPTNEYi5hdHRyKCJocmVmIik7aWYoYS5pbmRleE9mKCI/Iik9M0Q9M0Qt MSl7YSs9M0QiPQo/In1lbHNle2ErPTNEIiYifWErPTNEInVzZV9wYW5lbHM9M0RUcnVlIjtiLmF0 dHIoImhyZWYiLGEpO2IuYXR0cigidGFyZ2V0Iiw9CiJfc2VsZiIpfXJldHVybiBifSl9KTsKXCBO byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9n YWxheHktY2VudHJhbC9jb21taXRzL2IxOGZjZTY5OGNhMC8KQ2hhbmdlc2V0OiAgIGIxOGZjZTY5 OGNhMApVc2VyOiAgICAgICAgY2FybGZlYmVyaGFyZApEYXRlOiAgICAgICAgMjAxNS0wMi0yMyAy MjoxNDozNyswMDowMApTdW1tYXJ5OiAgICAgVUksIGhpc3RvcnkgcGFuZWw6IGNvcnJlY3RseSBk ZWZhdWx0IGNsZWFyTWVzc2FnZXMgdGFyZ2V0IHdoZW49CiBubyBldmVudCBpcyBnaXZlbgpBZmZl Y3RlZCAjOiAgOCBmaWxlcwoKZGlmZiAtciA1ZWE5ZmMyZjc1YWFlOGU1MmUxNjRhYjc1YzcxYWM5 N2Y4MmJmZjI0IC1yIGIxOGZjZTY5OGNhMGIyOWFhY2E3NzMzPQpjZjliYTk1YjY1YzU2Y2E0OCBj bGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL2hpc3RvcnkvaGlzdG9yeS1wYW5lbC1lZGl0LWN1cnI9 CmVudC5qcwotLS0gYS9jbGllbnQvZ2FsYXh5L3NjcmlwdHMvbXZjL2hpc3RvcnkvaGlzdG9yeS1w YW5lbC1lZGl0LWN1cnJlbnQuanMKKysrIGIvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy9oaXN0 b3J5L2hpc3RvcnktcGFuZWwtZWRpdC1jdXJyZW50LmpzCkBAIC0zNzksMjEgKzM3OSwzMSBAQAog ICAgIH0sCj0yMAogLy9UT0RPOiB0aGlzIHNlZW1zIG1vcmUgbGlrZSBhIHBlciB1c2VyIG1lc3Nh Z2UgdGhhbiBhIGhpc3RvcnkgbWVzc2FnZTsgSU89ClcsIHRoaXMgZG9lc24ndCBiZWxvbmcgaGVy ZQorICAgIC8qKiBPdmVycmlkZSB0byBwcmVzZXJ2ZSB0aGUgcXVvdGEgbWVzc2FnZSAqLworICAg IGNsZWFyTWVzc2FnZXMgOiBmdW5jdGlvbiggZXYgKXsKKyAgICAgICAgdmFyICR0YXJnZXQgPTNE ICFfLmlzVW5kZWZpbmVkKCBldiApPworICAgICAgICAgICAgJCggZXYuY3VycmVudFRhcmdldCAp CisgICAgICAgICAgICA6dGhpcy4kbWVzc2FnZXMoKS5jaGlsZHJlbiggJ1tjbGFzcyQ9M0QibWVz c2FnZSJdJyApOworICAgICAgICAkdGFyZ2V0ID0zRCAkdGFyZ2V0Lm5vdCggJy5xdW90YS1tZXNz YWdlJyApOworICAgICAgICAkdGFyZ2V0LmZhZGVPdXQoIHRoaXMuZnhTcGVlZCwgZnVuY3Rpb24o KXsKKyAgICAgICAgICAgICQoIHRoaXMgKS5yZW1vdmUoKTsKKyAgICAgICAgfSk7CisgICAgICAg IHJldHVybiB0aGlzOworICAgIH0sCisKICAgICAvKiogU2hvdyB0aGUgb3ZlciBxdW90YSBtZXNz YWdlICh3aGljaCBoYXBwZW5zIHRvIGJlIGluIHRoZSBoaXN0b3J5IHBhPQpuZWwpLgogICAgICAq LwogICAgIHNob3dRdW90YU1lc3NhZ2UgOiBmdW5jdGlvbigpewotICAgICAgICB2YXIgbXNnID0z RCB0aGlzLiRlbC5maW5kKCAnLnF1b3RhLW1lc3NhZ2UnICk7Ci0gICAgICAgIC8vdGhpcy5sb2co IHRoaXMgKyAnIHNob3dpbmcgcXVvdGEgbWVzc2FnZTonLCBtc2csIHVzZXJEYXRhICk7Ci0gICAg ICAgIGlmKCBtc2cuaXMoICc6aGlkZGVuJyApICl7IG1zZy5zbGlkZURvd24oIHRoaXMuZnhTcGVl ZCApOyB9CisgICAgICAgIHZhciAkbXNnID0zRCB0aGlzLiQoICcucXVvdGEtbWVzc2FnZScgKTsK KyAgICAgICAgaWYoICRtc2cuaXMoICc6aGlkZGVuJyApICl7ICRtc2cuc2xpZGVEb3duKCB0aGlz LmZ4U3BlZWQgKTsgfQogICAgIH0sCj0yMAogLy9UT0RPOiB0aGlzIHNlZW1zIG1vcmUgbGlrZSBh IHBlciB1c2VyIG1lc3NhZ2UgdGhhbiBhIGhpc3RvcnkgbWVzc2FnZQogICAgIC8qKiBIaWRlIHRo ZSBvdmVyIHF1b3RhIG1lc3NhZ2UgKHdoaWNoIGhhcHBlbnMgdG8gYmUgaW4gdGhlIGhpc3Rvcnkg cGE9Cm5lbCkuCiAgICAgICovCiAgICAgaGlkZVF1b3RhTWVzc2FnZSA6IGZ1bmN0aW9uKCl7Ci0g ICAgICAgIHZhciBtc2cgPTNEIHRoaXMuJGVsLmZpbmQoICcucXVvdGEtbWVzc2FnZScgKTsKLSAg ICAgICAgLy90aGlzLmxvZyggdGhpcyArICcgaGlkaW5nIHF1b3RhIG1lc3NhZ2U6JywgbXNnLCB1 c2VyRGF0YSApOwotICAgICAgICBpZiggIW1zZy5pcyggJzpoaWRkZW4nICkgKXsgbXNnLnNsaWRl VXAoIHRoaXMuZnhTcGVlZCApOyB9CisgICAgICAgIHZhciAkbXNnID0zRCB0aGlzLiQoICcucXVv dGEtbWVzc2FnZScgKTsKKyAgICAgICAgaWYoICEkbXNnLmlzKCAnOmhpZGRlbicgKSApeyAkbXNn LnNsaWRlVXAoIHRoaXMuZnhTcGVlZCApOyB9CiAgICAgfSwKPTIwCiAgICAgLyoqIFJldHVybiBh IHN0cmluZyByZXAgb2YgdGhlIGhpc3RvcnkKCmRpZmYgLXIgNWVhOWZjMmY3NWFhZThlNTJlMTY0 YWI3NWM3MWFjOTdmODJiZmYyNCAtciBiMThmY2U2OThjYTBiMjlhYWNhNzczMz0KY2Y5YmE5NWI2 NWM1NmNhNDggY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy9oaXN0b3J5L2hpc3RvcnktcGFuZWwu anMKLS0tIGEvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy9oaXN0b3J5L2hpc3RvcnktcGFuZWwu anMKKysrIGIvY2xpZW50L2dhbGF4eS9zY3JpcHRzL212Yy9oaXN0b3J5L2hpc3RvcnktcGFuZWwu anMKQEAgLTM4MSwxMiArMzgxLDkgQEAKICAgICAvKiogZXZlbnQgbWFwICovCiAgICAgZXZlbnRz IDogXy5leHRlbmQoIF8uY2xvbmUoIF9zdXBlci5wcm90b3R5cGUuZXZlbnRzICksIHsKICAgICAg ICAgLy8gdG9nZ2xlIGxpc3QgaXRlbSBzZWxlY3RvcnMKLSAgICAgICAgJ2NsaWNrIC5zaG93LXNl bGVjdG9ycy1idG4nICAgICAgICAgICAgICAgICA6ICd0b2dnbGVTZWxlY3RvcnMnCisgICAgICAg ICdjbGljayAuc2hvdy1zZWxlY3RvcnMtYnRuJyAgICAgICAgIDogJ3RvZ2dsZVNlbGVjdG9ycycs CiAgICAgICAgIC8vIGFsbG93IChlcnJvcikgbWVzc2FnZXMgdG8gYmUgY2xpY2tlZCBhd2F5Ci0v L1RPRE86IHN3aXRjaCB0byBjb21tb24gY2xvc2UgKFgpIGlkaW9tCi0gICAgICAgIC8vJ2NsaWNr IC5tZXNzYWdlcycgICAgICAgICAgICAgICA6ICdjbGVhck1lc3NhZ2VzJywKLS8vVE9ETzogcmVt b3ZlCi0gICAgICAgIC8vJ2NsaWNrIC5oaXN0b3J5LXNlYXJjaC1idG4nICAgICA6ICd0b2dnbGVT ZWFyY2hDb250cm9scycKKyAgICAgICAgJ2NsaWNrIC5tZXNzYWdlcyBbY2xhc3MkPTNEbWVzc2Fn ZV0nICA6ICdjbGVhck1lc3NhZ2VzJwogICAgIH0pLAo9MjAKICAgICAvKiogSGFuZGxlIHRoZSB1 c2VyIHRvZ2dsaW5nIHRoZSBkZWxldGVkIHZpc2liaWxpdHkgYnk6CkBAIC00NTcsMTQgKzQ1NCwx NCBAQAogICAgICAqLwogICAgIGVycm9ySGFuZGxlciA6IGZ1bmN0aW9uKCBtb2RlbCwgeGhyLCBv cHRpb25zLCBtc2csIGRldGFpbHMgKXsKICAgICAgICAgdGhpcy5lcnJvciggbW9kZWwsIHhociwg b3B0aW9ucywgbXNnLCBkZXRhaWxzICk7Ci0vL1RPRE86IGdldHRpbmcgSlNPTiBwYXJzZSBlcnJv cnMgZnJvbSBqcSBtaWdyYXRlCj0yMAogICAgICAgICAvLyBpbnRlcnJ1cHRlZCBhamF4CiAgICAg ICAgIGlmKCB4aHIgJiYgeGhyLnN0YXR1cyA9M0Q9M0Q9M0QgMCAmJiB4aHIucmVhZHlTdGF0ZSA9 M0Q9M0Q9M0QgMCApeworICAgICAgICAgICAgLy9UT0RPOiBnbWFpbCBzdHlsZSAncmV0cnlpbmcg aW4gTnMnCj0yMAogICAgICAgICAvLyBiYWQgZ2F0ZXdheQogICAgICAgICB9IGVsc2UgaWYoIHho ciAmJiB4aHIuc3RhdHVzID0zRD0zRD0zRCA1MDIgKXsKLS8vVE9ETzogZ21haWwgc3R5bGUgJ3Jl Y29ubmVjdGluZyBpbiBOcycKKyAgICAgICAgICAgIC8vVE9ETzogZ21haWwgc3R5bGUgJ3JldHJ5 aW5nIGluIE5zJwo9MjAKICAgICAgICAgLy8gb3RoZXJ3aXNlLCBzaG93IGFuIGVycm9yIG1lc3Nh Z2UgaW5zaWRlIHRoZSBwYW5lbAogICAgICAgICB9IGVsc2UgewpAQCAtNTUxLDcgKzU0OCw3IEBA CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAkbXNnLmFwcGVuZCggJyAnLCAkZGV0 YWlsc0xpbmsgKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gJG1zZ0NvbnRhaW5lci5odG1s KCAkbXNnICk7CisgICAgICAgIHJldHVybiAkbXNnQ29udGFpbmVyLmFwcGVuZCggJG1zZyApOwog ICAgIH0sCj0yMAogICAgIC8qKiBjb252ZXJ0IG1zZyBhbmQgZGV0YWlscyBpbnRvIG1vZGFsIG9w dGlvbnMgdXNhYmxlIGJ5IEdhbGF4eS5tb2RhbCA9CiovCkBAIC01ODIsMTAgKzU3OSwxMiBAQAo9 MjAKICAgICAvKiogUmVtb3ZlIGFsbCBtZXNzYWdlcyBmcm9tIHRoZSBwYW5lbC4gKi8KICAgICBj bGVhck1lc3NhZ2VzIDogZnVuY3Rpb24oIGV2ICl7Ci0gICAgICAgICQoIGV2LmN1cnJlbnRUYXJn ZXQgKS5mYWRlT3V0KCB0aGlzLmZ4U3BlZWQsIGZ1bmN0aW9uKCl7CisgICAgICAgIHZhciAkdGFy Z2V0ID0zRCAhXy5pc1VuZGVmaW5lZCggZXYgKT8KKyAgICAgICAgICAgICQoIGV2LmN1cnJlbnRU YXJnZXQgKQorICAgICAgICAgICAgOnRoaXMuJG1lc3NhZ2VzKCkuY2hpbGRyZW4oICdbY2xhc3Mk PTNEIm1lc3NhZ2UiXScgKTsKKyAgICAgICAgJHRhcmdldC5mYWRlT3V0KCB0aGlzLmZ4U3BlZWQs IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAkKCB0aGlzICkucmVtb3ZlKCk7CiAgICAgICAgIH0p OwotICAgICAgICAvL3RoaXMuJG1lc3NhZ2VzKCkuY2hpbGRyZW4oKS5ub3QoICcucXVvdGEtbWVz c2FnZScgKS5yZW1vdmUoKTsKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfSwKPTIwCgpkaWZm IC1yIDVlYTlmYzJmNzVhYWU4ZTUyZTE2NGFiNzVjNzFhYzk3ZjgyYmZmMjQgLXIgYjE4ZmNlNjk4 Y2EwYjI5YWFjYTc3MzM9CmNmOWJhOTViNjVjNTZjYTQ4IGNsaWVudC9nYWxheHkvc2NyaXB0cy9t dmMvbGlzdC9saXN0LXBhbmVsLmpzCi0tLSBhL2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvbGlz dC9saXN0LXBhbmVsLmpzCisrKyBiL2NsaWVudC9nYWxheHkvc2NyaXB0cy9tdmMvbGlzdC9saXN0 LXBhbmVsLmpzCkBAIC0xMTksNiArMTE5LDggQEAKICAgICBfc2V0VXBMaXN0ZW5lcnMgOiBmdW5j dGlvbigpewogICAgICAgICB0aGlzLm9mZigpOwo9MjAKKyAgICAgICAgLy9UT0RPOiBtb3ZlIGVy cm9ySGFuZGxlciBkb3duIGludG8gbGlzdC1wYW5lbCBmcm9tIGhpc3RvcnktcGFuZWwgPQpvcgor ICAgICAgICAvLyAgcGFzcyB0byBnbG9iYWwgZXJyb3IgaGFuZGxlciAoR2FsYXh5KQogICAgICAg ICB0aGlzLm9uKCAnZXJyb3InLCBmdW5jdGlvbiggbW9kZWwsIHhociwgb3B0aW9ucywgbXNnLCBk ZXRhaWxzICl7CiAgICAgICAgICAgICAvL3RoaXMuZXJyb3JIYW5kbGVyKCBtb2RlbCwgeGhyLCBv cHRpb25zLCBtc2csIGRldGFpbHMgKTsKICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIG1vZGVs LCB4aHIsIG9wdGlvbnMsIG1zZywgZGV0YWlscyApOwoKZGlmZiAtciA1ZWE5ZmMyZjc1YWFlOGU1 MmUxNjRhYjc1YzcxYWM5N2Y4MmJmZjI0IC1yIGIxOGZjZTY5OGNhMGIyOWFhY2E3NzMzPQpjZjli YTk1YjY1YzU2Y2E0OCBzdGF0aWMvc2NyaXB0cy9tdmMvaGlzdG9yeS9oaXN0b3J5LXBhbmVsLWVk aXQtY3VycmVudC5qcwotLS0gYS9zdGF0aWMvc2NyaXB0cy9tdmMvaGlzdG9yeS9oaXN0b3J5LXBh bmVsLWVkaXQtY3VycmVudC5qcworKysgYi9zdGF0aWMvc2NyaXB0cy9tdmMvaGlzdG9yeS9oaXN0 b3J5LXBhbmVsLWVkaXQtY3VycmVudC5qcwpAQCAtMzc5LDIxICszNzksMzEgQEAKICAgICB9LAo9 MjAKIC8vVE9ETzogdGhpcyBzZWVtcyBtb3JlIGxpa2UgYSBwZXIgdXNlciBtZXNzYWdlIHRoYW4g YSBoaXN0b3J5IG1lc3NhZ2U7IElPPQpXLCB0aGlzIGRvZXNuJ3QgYmVsb25nIGhlcmUKKyAgICAv KiogT3ZlcnJpZGUgdG8gcHJlc2VydmUgdGhlIHF1b3RhIG1lc3NhZ2UgKi8KKyAgICBjbGVhck1l c3NhZ2VzIDogZnVuY3Rpb24oIGV2ICl7CisgICAgICAgIHZhciAkdGFyZ2V0ID0zRCAhXy5pc1Vu ZGVmaW5lZCggZXYgKT8KKyAgICAgICAgICAgICQoIGV2LmN1cnJlbnRUYXJnZXQgKQorICAgICAg ICAgICAgOnRoaXMuJG1lc3NhZ2VzKCkuY2hpbGRyZW4oICdbY2xhc3MkPTNEIm1lc3NhZ2UiXScg KTsKKyAgICAgICAgJHRhcmdldCA9M0QgJHRhcmdldC5ub3QoICcucXVvdGEtbWVzc2FnZScgKTsK KyAgICAgICAgJHRhcmdldC5mYWRlT3V0KCB0aGlzLmZ4U3BlZWQsIGZ1bmN0aW9uKCl7CisgICAg ICAgICAgICAkKCB0aGlzICkucmVtb3ZlKCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4g dGhpczsKKyAgICB9LAorCiAgICAgLyoqIFNob3cgdGhlIG92ZXIgcXVvdGEgbWVzc2FnZSAod2hp Y2ggaGFwcGVucyB0byBiZSBpbiB0aGUgaGlzdG9yeSBwYT0KbmVsKS4KICAgICAgKi8KICAgICBz aG93UXVvdGFNZXNzYWdlIDogZnVuY3Rpb24oKXsKLSAgICAgICAgdmFyIG1zZyA9M0QgdGhpcy4k ZWwuZmluZCggJy5xdW90YS1tZXNzYWdlJyApOwotICAgICAgICAvL3RoaXMubG9nKCB0aGlzICsg JyBzaG93aW5nIHF1b3RhIG1lc3NhZ2U6JywgbXNnLCB1c2VyRGF0YSApOwotICAgICAgICBpZigg bXNnLmlzKCAnOmhpZGRlbicgKSApeyBtc2cuc2xpZGVEb3duKCB0aGlzLmZ4U3BlZWQgKTsgfQor ICAgICAgICB2YXIgJG1zZyA9M0QgdGhpcy4kKCAnLnF1b3RhLW1lc3NhZ2UnICk7CisgICAgICAg IGlmKCAkbXNnLmlzKCAnOmhpZGRlbicgKSApeyAkbXNnLnNsaWRlRG93biggdGhpcy5meFNwZWVk ICk7IH0KICAgICB9LAo9MjAKIC8vVE9ETzogdGhpcyBzZWVtcyBtb3JlIGxpa2UgYSBwZXIgdXNl ciBtZXNzYWdlIHRoYW4gYSBoaXN0b3J5IG1lc3NhZ2UKICAgICAvKiogSGlkZSB0aGUgb3ZlciBx dW90YSBtZXNzYWdlICh3aGljaCBoYXBwZW5zIHRvIGJlIGluIHRoZSBoaXN0b3J5IHBhPQpuZWwp LgogICAgICAqLwogICAgIGhpZGVRdW90YU1lc3NhZ2UgOiBmdW5jdGlvbigpewotICAgICAgICB2 YXIgbXNnID0zRCB0aGlzLiRlbC5maW5kKCAnLnF1b3RhLW1lc3NhZ2UnICk7Ci0gICAgICAgIC8v dGhpcy5sb2coIHRoaXMgKyAnIGhpZGluZyBxdW90YSBtZXNzYWdlOicsIG1zZywgdXNlckRhdGEg KTsKLSAgICAgICAgaWYoICFtc2cuaXMoICc6aGlkZGVuJyApICl7IG1zZy5zbGlkZVVwKCB0aGlz LmZ4U3BlZWQgKTsgfQorICAgICAgICB2YXIgJG1zZyA9M0QgdGhpcy4kKCAnLnF1b3RhLW1lc3Nh Z2UnICk7CisgICAgICAgIGlmKCAhJG1zZy5pcyggJzpoaWRkZW4nICkgKXsgJG1zZy5zbGlkZVVw KCB0aGlzLmZ4U3BlZWQgKTsgfQogICAgIH0sCj0yMAogICAgIC8qKiBSZXR1cm4gYSBzdHJpbmcg cmVwIG9mIHRoZSBoaXN0b3J5CgpkaWZmIC1yIDVlYTlmYzJmNzVhYWU4ZTUyZTE2NGFiNzVjNzFh Yzk3ZjgyYmZmMjQgLXIgYjE4ZmNlNjk4Y2EwYjI5YWFjYTc3MzM9CmNmOWJhOTViNjVjNTZjYTQ4 IHN0YXRpYy9zY3JpcHRzL212Yy9oaXN0b3J5L2hpc3RvcnktcGFuZWwuanMKLS0tIGEvc3RhdGlj L3NjcmlwdHMvbXZjL2hpc3RvcnkvaGlzdG9yeS1wYW5lbC5qcworKysgYi9zdGF0aWMvc2NyaXB0 cy9tdmMvaGlzdG9yeS9oaXN0b3J5LXBhbmVsLmpzCkBAIC0zODEsMTIgKzM4MSw5IEBACiAgICAg LyoqIGV2ZW50IG1hcCAqLwogICAgIGV2ZW50cyA6IF8uZXh0ZW5kKCBfLmNsb25lKCBfc3VwZXIu cHJvdG90eXBlLmV2ZW50cyApLCB7CiAgICAgICAgIC8vIHRvZ2dsZSBsaXN0IGl0ZW0gc2VsZWN0 b3JzCi0gICAgICAgICdjbGljayAuc2hvdy1zZWxlY3RvcnMtYnRuJyAgICAgICAgICAgICAgICAg OiAndG9nZ2xlU2VsZWN0b3JzJworICAgICAgICAnY2xpY2sgLnNob3ctc2VsZWN0b3JzLWJ0bicg ICAgICAgICA6ICd0b2dnbGVTZWxlY3RvcnMnLAogICAgICAgICAvLyBhbGxvdyAoZXJyb3IpIG1l c3NhZ2VzIHRvIGJlIGNsaWNrZWQgYXdheQotLy9UT0RPOiBzd2l0Y2ggdG8gY29tbW9uIGNsb3Nl IChYKSBpZGlvbQotICAgICAgICAvLydjbGljayAubWVzc2FnZXMnICAgICAgICAgICAgICAgOiAn Y2xlYXJNZXNzYWdlcycsCi0vL1RPRE86IHJlbW92ZQotICAgICAgICAvLydjbGljayAuaGlzdG9y eS1zZWFyY2gtYnRuJyAgICAgOiAndG9nZ2xlU2VhcmNoQ29udHJvbHMnCisgICAgICAgICdjbGlj ayAubWVzc2FnZXMgW2NsYXNzJD0zRG1lc3NhZ2VdJyAgOiAnY2xlYXJNZXNzYWdlcycKICAgICB9 KSwKPTIwCiAgICAgLyoqIEhhbmRsZSB0aGUgdXNlciB0b2dnbGluZyB0aGUgZGVsZXRlZCB2aXNp YmlsaXR5IGJ5OgpAQCAtNDU3LDE0ICs0NTQsMTQgQEAKICAgICAgKi8KICAgICBlcnJvckhhbmRs ZXIgOiBmdW5jdGlvbiggbW9kZWwsIHhociwgb3B0aW9ucywgbXNnLCBkZXRhaWxzICl7CiAgICAg ICAgIHRoaXMuZXJyb3IoIG1vZGVsLCB4aHIsIG9wdGlvbnMsIG1zZywgZGV0YWlscyApOwotLy9U T0RPOiBnZXR0aW5nIEpTT04gcGFyc2UgZXJyb3JzIGZyb20ganEgbWlncmF0ZQo9MjAKICAgICAg ICAgLy8gaW50ZXJydXB0ZWQgYWpheAogICAgICAgICBpZiggeGhyICYmIHhoci5zdGF0dXMgPTNE PTNEPTNEIDAgJiYgeGhyLnJlYWR5U3RhdGUgPTNEPTNEPTNEIDAgKXsKKyAgICAgICAgICAgIC8v VE9ETzogZ21haWwgc3R5bGUgJ3JldHJ5aW5nIGluIE5zJwo9MjAKICAgICAgICAgLy8gYmFkIGdh dGV3YXkKICAgICAgICAgfSBlbHNlIGlmKCB4aHIgJiYgeGhyLnN0YXR1cyA9M0Q9M0Q9M0QgNTAy ICl7Ci0vL1RPRE86IGdtYWlsIHN0eWxlICdyZWNvbm5lY3RpbmcgaW4gTnMnCisgICAgICAgICAg ICAvL1RPRE86IGdtYWlsIHN0eWxlICdyZXRyeWluZyBpbiBOcycKPTIwCiAgICAgICAgIC8vIG90 aGVyd2lzZSwgc2hvdyBhbiBlcnJvciBtZXNzYWdlIGluc2lkZSB0aGUgcGFuZWwKICAgICAgICAg fSBlbHNlIHsKQEAgLTU1MSw3ICs1NDgsNyBAQAogICAgICAgICAgICAgICAgIH0pOwogICAgICAg ICAgICAgJG1zZy5hcHBlbmQoICcgJywgJGRldGFpbHNMaW5rICk7CiAgICAgICAgIH0KLSAgICAg ICAgcmV0dXJuICRtc2dDb250YWluZXIuaHRtbCggJG1zZyApOworICAgICAgICByZXR1cm4gJG1z Z0NvbnRhaW5lci5hcHBlbmQoICRtc2cgKTsKICAgICB9LAo9MjAKICAgICAvKiogY29udmVydCBt c2cgYW5kIGRldGFpbHMgaW50byBtb2RhbCBvcHRpb25zIHVzYWJsZSBieSBHYWxheHkubW9kYWwg PQoqLwpAQCAtNTgyLDEwICs1NzksMTIgQEAKPTIwCiAgICAgLyoqIFJlbW92ZSBhbGwgbWVzc2Fn ZXMgZnJvbSB0aGUgcGFuZWwuICovCiAgICAgY2xlYXJNZXNzYWdlcyA6IGZ1bmN0aW9uKCBldiAp ewotICAgICAgICAkKCBldi5jdXJyZW50VGFyZ2V0ICkuZmFkZU91dCggdGhpcy5meFNwZWVkLCBm dW5jdGlvbigpeworICAgICAgICB2YXIgJHRhcmdldCA9M0QgIV8uaXNVbmRlZmluZWQoIGV2ICk/ CisgICAgICAgICAgICAkKCBldi5jdXJyZW50VGFyZ2V0ICkKKyAgICAgICAgICAgIDp0aGlzLiRt ZXNzYWdlcygpLmNoaWxkcmVuKCAnW2NsYXNzJD0zRCJtZXNzYWdlIl0nICk7CisgICAgICAgICR0 YXJnZXQuZmFkZU91dCggdGhpcy5meFNwZWVkLCBmdW5jdGlvbigpewogICAgICAgICAgICAgJCgg dGhpcyApLnJlbW92ZSgpOwogICAgICAgICB9KTsKLSAgICAgICAgLy90aGlzLiRtZXNzYWdlcygp LmNoaWxkcmVuKCkubm90KCAnLnF1b3RhLW1lc3NhZ2UnICkucmVtb3ZlKCk7CiAgICAgICAgIHJl dHVybiB0aGlzOwogICAgIH0sCj0yMAoKZGlmZiAtciA1ZWE5ZmMyZjc1YWFlOGU1MmUxNjRhYjc1 YzcxYWM5N2Y4MmJmZjI0IC1yIGIxOGZjZTY5OGNhMGIyOWFhY2E3NzMzPQpjZjliYTk1YjY1YzU2 Y2E0OCBzdGF0aWMvc2NyaXB0cy9tdmMvbGlzdC9saXN0LXBhbmVsLmpzCi0tLSBhL3N0YXRpYy9z Y3JpcHRzL212Yy9saXN0L2xpc3QtcGFuZWwuanMKKysrIGIvc3RhdGljL3NjcmlwdHMvbXZjL2xp c3QvbGlzdC1wYW5lbC5qcwpAQCAtMTE5LDYgKzExOSw4IEBACiAgICAgX3NldFVwTGlzdGVuZXJz IDogZnVuY3Rpb24oKXsKICAgICAgICAgdGhpcy5vZmYoKTsKPTIwCisgICAgICAgIC8vVE9ETzog bW92ZSBlcnJvckhhbmRsZXIgZG93biBpbnRvIGxpc3QtcGFuZWwgZnJvbSBoaXN0b3J5LXBhbmVs ID0Kb3IKKyAgICAgICAgLy8gIHBhc3MgdG8gZ2xvYmFsIGVycm9yIGhhbmRsZXIgKEdhbGF4eSkK ICAgICAgICAgdGhpcy5vbiggJ2Vycm9yJywgZnVuY3Rpb24oIG1vZGVsLCB4aHIsIG9wdGlvbnMs IG1zZywgZGV0YWlscyApewogICAgICAgICAgICAgLy90aGlzLmVycm9ySGFuZGxlciggbW9kZWws IHhociwgb3B0aW9ucywgbXNnLCBkZXRhaWxzICk7CiAgICAgICAgICAgICBjb25zb2xlLmVycm9y KCBtb2RlbCwgeGhyLCBvcHRpb25zLCBtc2csIGRldGFpbHMgKTsKCmRpZmYgLXIgNWVhOWZjMmY3 NWFhZThlNTJlMTY0YWI3NWM3MWFjOTdmODJiZmYyNCAtciBiMThmY2U2OThjYTBiMjlhYWNhNzcz Mz0KY2Y5YmE5NWI2NWM1NmNhNDggc3RhdGljL3NjcmlwdHMvcGFja2VkL212Yy9oaXN0b3J5L2hp c3RvcnktcGFuZWwtZWRpdC1jdXJyPQplbnQuanMKLS0tIGEvc3RhdGljL3NjcmlwdHMvcGFja2Vk L212Yy9oaXN0b3J5L2hpc3RvcnktcGFuZWwtZWRpdC1jdXJyZW50LmpzCisrKyBiL3N0YXRpYy9z Y3JpcHRzL3BhY2tlZC9tdmMvaGlzdG9yeS9oaXN0b3J5LXBhbmVsLWVkaXQtY3VycmVudC5qcwpA QCAtMSwxICsxLDEgQEAKLWRlZmluZShbIm12Yy9oaXN0b3J5L2hpc3RvcnktbW9kZWwiLCJtdmMv aGlzdG9yeS9oaXN0b3J5LXBhbmVsLWVkaXQiLCJtdmMvPQpjb2xsZWN0aW9uL2NvbGxlY3Rpb24t cGFuZWwiLCJtdmMvYmFzZS1tdmMiLCJ1dGlscy9sb2NhbGl6YXRpb24iXSxmdW5jdGlvbig9CmQs YyxhLGgsYil7dmFyIGU9M0RoLlNlc3Npb25TdG9yYWdlTW9kZWwuZXh0ZW5kKHtkZWZhdWx0czp7 dGFnc0VkaXRvclNob3duOj0KZmFsc2UsYW5ub3RhdGlvbkVkaXRvclNob3duOmZhbHNlLHNjcm9s bFBvc2l0aW9uOjB9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0PQp1cm4iSGlzdG9yeVBhbmVsUHJl ZnMoIitKU09OLnN0cmluZ2lmeSh0aGlzLnRvSlNPTigpKSsiKSJ9fSk7ZS5zdG9yYWdlS2V5PQo9 M0RmdW5jdGlvbiBmKCl7cmV0dXJuKCJoaXN0b3J5LXBhbmVsIil9O3ZhciBnPTNEYy5IaXN0b3J5 UGFuZWxFZGl0O3ZhciBpPQo9M0RnLmV4dGVuZCh7Y2xhc3NOYW1lOmcucHJvdG90eXBlLmNsYXNz TmFtZSsiIGN1cnJlbnQtaGlzdG9yeS1wYW5lbCIsZW1wdHk9Ck1zZzpiKCJUaGlzIGhpc3Rvcnkg aXMgZW1wdHkuIENsaWNrICdHZXQgRGF0YScgb24gdGhlIGxlZnQgdG9vbCBtZW51IHRvIHN0YT0K cnQiKSxub25lRm91bmRNc2c6YigiTm8gbWF0Y2hpbmcgZGF0YXNldHMgZm91bmQiKSxIRENBVmll d0NsYXNzOmcucHJvdG90eXBlPQouSERDQVZpZXdDbGFzcy5leHRlbmQoe2ZvbGRvdXRTdHlsZToi ZHJpbGxkb3duIn0pLGluaXRpYWxpemU6ZnVuY3Rpb24oail7aj0KPTNEanx8e307dGhpcy5wcmVm ZXJlbmNlcz0zRG5ldyBlKF8uZXh0ZW5kKHtpZDplLnN0b3JhZ2VLZXkoKX0sXy5waWNrKGosXy5r PQpleXMoZS5wcm90b3R5cGUuZGVmYXVsdHMpKSkpO2cucHJvdG90eXBlLmluaXRpYWxpemUuY2Fs bCh0aGlzLGopO3RoaXMucGFuZWw9ClN0YWNrPTNEW107dGhpcy5jdXJyZW50Q29udGVudElkPTNE ai5jdXJyZW50Q29udGVudElkfHxudWxsfSxfc2V0VXBMaXN0ZW5lcj0KczpmdW5jdGlvbigpe2cu cHJvdG90eXBlLl9zZXRVcExpc3RlbmVycy5jYWxsKHRoaXMpO3ZhciBqPTNEdGhpczt0aGlzLiRz Y3JvPQpsbENvbnRhaW5lcigpLm9uKCJzY3JvbGwiLGZ1bmN0aW9uKGspe2lmKGouJGVsLmlzKCI6 dmlzaWJsZSIpKXtqLnByZWZlcmVuY2U9CnMuc2V0KCJzY3JvbGxQb3NpdGlvbiIsJCh0aGlzKS5z Y3JvbGxUb3AoKSl9fSk7dGhpcy5vbigibmV3LW1vZGVsIixmdW5jdGlvbj0KKCl7ai5wcmVmZXJl bmNlcy5zZXQoInNjcm9sbFBvc2l0aW9uIiwwKX0pfSxsb2FkQ3VycmVudEhpc3Rvcnk6ZnVuY3Rp b24oayl7PQp0aGlzLmRlYnVnKHRoaXMrIi5sb2FkQ3VycmVudEhpc3RvcnkiKTt2YXIgaj0zRHRo aXM7cmV0dXJuIHRoaXMubG9hZEhpc3Rvcnk9CldpdGhEZXRhaWxzKCJjdXJyZW50IixrKS50aGVu KGZ1bmN0aW9uKG0sbCl7ai50cmlnZ2VyKCJjdXJyZW50LWhpc3RvcnkiLGopfT0KKX0sc3dpdGNo VG9IaXN0b3J5OmZ1bmN0aW9uKG0sbCl7dmFyIGo9M0R0aGlzLGs9M0RmdW5jdGlvbigpe3JldHVy biBqUXVlcnkuPQpnZXRKU09OKGdhbGF4eV9jb25maWcucm9vdCsiaGlzdG9yeS9zZXRfYXNfY3Vy cmVudD9pZD0zRCIrbSl9O3JldHVybiB0aGlzLmw9Cm9hZEhpc3RvcnlXaXRoRGV0YWlscyhtLGws aykudGhlbihmdW5jdGlvbihvLG4pe2oudHJpZ2dlcigic3dpdGNoZWQtaGlzdG9yeT0KIixqKX0p fSxjcmVhdGVOZXdIaXN0b3J5OmZ1bmN0aW9uKGwpe2lmKCFHYWxheHl8fCFHYWxheHkuY3VyclVz ZXJ8fEdhbGF4eS5jPQp1cnJVc2VyLmlzQW5vbnltb3VzKCkpe3RoaXMuZGlzcGxheU1lc3NhZ2Uo ImVycm9yIixiKCJZb3UgbXVzdCBiZSBsb2dnZWQgaW49CiB0byBjcmVhdGUgaGlzdG9yaWVzIikp O3JldHVybiAkLndoZW4oKX12YXIgaj0zRHRoaXMsaz0zRGZ1bmN0aW9uKCl7cmV0dXJuID0KalF1 ZXJ5LmdldEpTT04oZ2FsYXh5X2NvbmZpZy5yb290KyJoaXN0b3J5L2NyZWF0ZV9uZXdfY3VycmVu dCIpfTtyZXR1cm4gdGhpPQpzLmxvYWRIaXN0b3J5KHVuZGVmaW5lZCxsLGspLnRoZW4oZnVuY3Rp b24obixtKXtqLnRyaWdnZXIoIm5ldy1oaXN0b3J5IixqKX09Cil9LHNldE1vZGVsOmZ1bmN0aW9u KGssaixsKXtnLnByb3RvdHlwZS5zZXRNb2RlbC5jYWxsKHRoaXMsayxqLGwpO2lmKHRoaXMubT0K b2RlbCl7dGhpcy5sb2coImNoZWNraW5nIGZvciB1cGRhdGVzIik7dGhpcy5tb2RlbC5jaGVja0Zv clVwZGF0ZXMoKX1yZXR1cm4gPQp0aGlzfSxfc2V0VXBDb2xsZWN0aW9uTGlzdGVuZXJzOmZ1bmN0 aW9uKCl7Zy5wcm90b3R5cGUuX3NldFVwQ29sbGVjdGlvbkxpc3Q9CmVuZXJzLmNhbGwodGhpcyk7 dGhpcy5jb2xsZWN0aW9uLm9uKCJzdGF0ZTpyZWFkeSIsZnVuY3Rpb24oayxsLGope2lmKCghay5n ZT0KdCgidmlzaWJsZSIpKSYmKCF0aGlzLnN0b3JhZ2UuZ2V0KCJzaG93X2hpZGRlbiIpKSl7dGhp cy5yZW1vdmVJdGVtVmlldyhrKX19PQosdGhpcyl9LF9zZXRVcE1vZGVsTGlzdGVuZXJzOmZ1bmN0 aW9uKCl7Zy5wcm90b3R5cGUuX3NldFVwTW9kZWxMaXN0ZW5lcnMuY2E9CmxsKHRoaXMpO2lmKEdh bGF4eSYmR2FsYXh5LnF1b3RhTWV0ZXIpe3RoaXMubGlzdGVuVG8odGhpcy5tb2RlbCwiY2hhbmdl Om5pYz0KZV9zaXplIixmdW5jdGlvbigpe0dhbGF4eS5xdW90YU1ldGVyLnVwZGF0ZSgpfSl9fSxf YnVpbGROZXdSZW5kZXI6ZnVuY3Rpb24oPQope2lmKCF0aGlzLm1vZGVsKXtyZXR1cm4gJCgpfXZh ciBqPTNEZy5wcm90b3R5cGUuX2J1aWxkTmV3UmVuZGVyLmNhbGwodGhpcyk9CjtqLmZpbmQoIi5z ZWFyY2giKS5wcmVwZW5kVG8oai5maW5kKCIuY29udHJvbHMiKSk7dGhpcy5fcmVuZGVyUXVvdGFN ZXNzYWdlKD0Kaik7cmV0dXJuIGp9LF9yZW5kZXJRdW90YU1lc3NhZ2U6ZnVuY3Rpb24oail7aj0z RGp8fHRoaXMuJGVsO3JldHVybiAkKHRoaXMuPQp0ZW1wbGF0ZXMucXVvdGFNc2coe30sdGhpcykp LnByZXBlbmRUbyhqLmZpbmQoIi5tZXNzYWdlcyIpKX0sX3JlbmRlckVtcHR5TWU9CnNzYWdlOmZ1 bmN0aW9uKGwpe3ZhciBrPTNEdGhpcyxqPTNEay4kZW1wdHlNZXNzYWdlKGwpLG09M0QkKCIudG9v bE1lbnVDb250YT0KaW5lciIpO2lmKChfLmlzRW1wdHkoay52aWV3cykmJiFrLnNlYXJjaEZvcikm JihHYWxheHkmJkdhbGF4eS51cGxvYWQmJm0uc2l6PQplKCkpKXtqLmVtcHR5KCk7ai5odG1sKFti KCJUaGlzIGhpc3RvcnkgaXMgZW1wdHkiKSwiLiAiLGIoIllvdSBjYW4gIiksJzxhIGM9Cmxhc3M9 M0QidXBsb2FkZXItbGluayIgaHJlZj0zRCJqYXZhc2NyaXB0OnZvaWQoMCkiPicsYigibG9hZCB5 b3VyIG93biBkYXRhIj0KKSwiPC9hPiIsYigiIG9yICIpLCc8YSBjbGFzcz0zRCJnZXQtZGF0YS1s aW5rIiBocmVmPTNEImphdmFzY3JpcHQ6dm9pZCgwKSI+PQonLGIoImdldCBkYXRhIGZyb20gYW4g ZXh0ZXJuYWwgc291cmNlIiksIjwvYT4iXS5qb2luKCIiKSk7ai5maW5kKCIudXBsb2FkZXI9Ci1s aW5rIikuY2xpY2soZnVuY3Rpb24obil7R2FsYXh5LnVwbG9hZC5zaG93KG4pfSk7ai5maW5kKCIu Z2V0LWRhdGEtbGluayIpLj0KY2xpY2soZnVuY3Rpb24obil7bS5wYXJlbnQoKS5zY3JvbGxUb3Ao MCk7bS5maW5kKCdzcGFuOmNvbnRhaW5zKCJHZXQgRGF0YSIpPQonKS5jbGljaygpfSk7cmV0dXJu IGouc2hvdygpfXJldHVybiBnLnByb3RvdHlwZS5fcmVuZGVyRW1wdHlNZXNzYWdlLmNhbGwodGg9 CmlzLGwpfSxfcmVuZGVyVGFnczpmdW5jdGlvbihqKXt2YXIgaz0zRHRoaXM7Zy5wcm90b3R5cGUu X3JlbmRlclRhZ3MuY2FsbCh0aD0KaXMsaik7aWYodGhpcy5wcmVmZXJlbmNlcy5nZXQoInRhZ3NF ZGl0b3JTaG93biIpKXt0aGlzLnRhZ3NFZGl0b3IudG9nZ2xlKHRyPQp1ZSl9dGhpcy50YWdzRWRp dG9yLm9uKCJoaWRkZW5VbnRpbEFjdGl2YXRlZDpzaG93biBoaWRkZW5VbnRpbEFjdGl2YXRlZDpo aWQ9CmRlbiIsZnVuY3Rpb24obCl7ay5wcmVmZXJlbmNlcy5zZXQoInRhZ3NFZGl0b3JTaG93biIs bC5oaWRkZW4pfSl9LF9yZW5kZXJBbj0Kbm90YXRpb246ZnVuY3Rpb24oail7dmFyIGs9M0R0aGlz O2cucHJvdG90eXBlLl9yZW5kZXJBbm5vdGF0aW9uLmNhbGwodGhpcyxqPQopO2lmKHRoaXMucHJl ZmVyZW5jZXMuZ2V0KCJhbm5vdGF0aW9uRWRpdG9yU2hvd24iKSl7dGhpcy5hbm5vdGF0aW9uRWRp dG9yLnQ9Cm9nZ2xlKHRydWUpfXRoaXMuYW5ub3RhdGlvbkVkaXRvci5vbigiaGlkZGVuVW50aWxB Y3RpdmF0ZWQ6c2hvd24gaGlkZGVuVW50aT0KbEFjdGl2YXRlZDpoaWRkZW4iLGZ1bmN0aW9uKGwp e2sucHJlZmVyZW5jZXMuc2V0KCJhbm5vdGF0aW9uRWRpdG9yU2hvd24iLGwuPQpoaWRkZW4pfSl9 LF9zd2FwTmV3UmVuZGVyOmZ1bmN0aW9uKGspe2cucHJvdG90eXBlLl9zd2FwTmV3UmVuZGVyLmNh bGwodGhpcyw9CmspO3ZhciBqPTNEdGhpcztfLmRlbGF5KGZ1bmN0aW9uKCl7dmFyIGw9M0RqLnBy ZWZlcmVuY2VzLmdldCgic2Nyb2xsUG9zaXRpbz0KbiIpO2lmKGwpe2ouc2Nyb2xsVG8obCl9fSwx MCk7cmV0dXJuIHRoaXN9LF9hdHRhY2hJdGVtczpmdW5jdGlvbihrKXtnLnByb3RvPQp0eXBlLl9h dHRhY2hJdGVtcy5jYWxsKHRoaXMsayk7dmFyIGo9M0R0aGlzLGw7aWYoai5jdXJyZW50Q29udGVu dElkJiYobD0zRGo9Ci52aWV3RnJvbU1vZGVsSWQoai5jdXJyZW50Q29udGVudElkKSkpe2ouc2V0 Q3VycmVudENvbnRlbnQobCl9cmV0dXJuIHRoaXN9LD0KYWRkSXRlbVZpZXc6ZnVuY3Rpb24obCxt LGspe3ZhciBqPTNEZy5wcm90b3R5cGUuYWRkSXRlbVZpZXcuY2FsbCh0aGlzLGwsbSxrPQopO2lm KCFqKXtyZXR1cm4gan1pZih0aGlzLnBhbmVsU3RhY2subGVuZ3RoKXtyZXR1cm4gdGhpcy5fY29s bGFwc2VEcmlsbGRvd249ClBhbmVsKCl9cmV0dXJuIGp9LF9zZXRVcEl0ZW1WaWV3TGlzdGVuZXJz OmZ1bmN0aW9uKGspe3ZhciBqPTNEdGhpcztnLnByb3RvdD0KeXBlLl9zZXRVcEl0ZW1WaWV3TGlz dGVuZXJzLmNhbGwoaixrKTtrLm9uKCJleHBhbmRlZDpkcmlsbGRvd24iLGZ1bmN0aW9uKG0sPQps KXt0aGlzLl9leHBhbmREcmlsbGRvd25QYW5lbChsKX0sdGhpcyk7ay5vbigiY29sbGFwc2VkOmRy aWxsZG93biIsZnVuY3Rpb249CihtLGwpe3RoaXMuX2NvbGxhcHNlRHJpbGxkb3duUGFuZWwobCl9 LHRoaXMpO2sub24oImRpc3BsYXkgZWRpdCBwYXJhbXMgcmVydT0KbiByZXBvcnQtZXJyIHZpc3Vh bGl6ZSIsZnVuY3Rpb24obCxtKXt0aGlzLnNldEN1cnJlbnRDb250ZW50KGwpfSx0aGlzKTtyZXR1 PQpybiB0aGlzfSxzZXRDdXJyZW50Q29udGVudDpmdW5jdGlvbihqKXt0aGlzLiQoIi5oaXN0b3J5 LWNvbnRlbnQuY3VycmVudC1jb249CnRlbnQiKS5yZW1vdmVDbGFzcygiY3VycmVudC1jb250ZW50 Iik7aWYoail7ai4kZWwuYWRkQ2xhc3MoImN1cnJlbnQtY29udGVudD0KIik7dGhpcy5jdXJyZW50 Q29udGVudElkPTNEai5tb2RlbC5pZH1lbHNle3RoaXMuY3VycmVudENvbnRlbnRJZD0zRG51bGx9 fSxfPQpleHBhbmREcmlsbGRvd25QYW5lbDpmdW5jdGlvbihqKXt0aGlzLnBhbmVsU3RhY2sucHVz aChqKTt0aGlzLiQoIj4gLmNvbnRyb2w9CnMiKS5hZGQodGhpcy4kbGlzdCgpKS5oaWRlKCk7ai5w YXJlbnROYW1lPTNEdGhpcy5tb2RlbC5nZXQoIm5hbWUiKTt0aGlzLiRlbD0KLmFwcGVuZChqLnJl bmRlcigpLiRlbCl9LF9jb2xsYXBzZURyaWxsZG93blBhbmVsOmZ1bmN0aW9uKGope3RoaXMucGFu ZWxTdGFjPQprLnBvcCgpO3RoaXMucmVuZGVyKCl9LGNvbm5lY3RUb1F1b3RhTWV0ZXI6ZnVuY3Rp b24oail7aWYoIWope3JldHVybiB0aGlzfXQ9Cmhpcy5saXN0ZW5UbyhqLCJxdW90YTpvdmVyIix0 aGlzLnNob3dRdW90YU1lc3NhZ2UpO3RoaXMubGlzdGVuVG8oaiwicXVvdGE6dT0KbmRlciIsdGhp cy5oaWRlUXVvdGFNZXNzYWdlKTt0aGlzLm9uKCJyZW5kZXJlZCByZW5kZXJlZDppbml0aWFsIixm dW5jdGlvbigpPQp7aWYoaiYmai5pc092ZXJRdW90YSgpKXt0aGlzLnNob3dRdW90YU1lc3NhZ2Uo KX19KTtyZXR1cm4gdGhpc30sc2hvd1F1b3RhTWU9CnNzYWdlOmZ1bmN0aW9uKCl7dmFyIGo9M0R0 aGlzLiRlbC5maW5kKCIucXVvdGEtbWVzc2FnZSIpO2lmKGouaXMoIjpoaWRkZW4iKT0KKXtqLnNs aWRlRG93bih0aGlzLmZ4U3BlZWQpfX0saGlkZVF1b3RhTWVzc2FnZTpmdW5jdGlvbigpe3ZhciBq PTNEdGhpcy4kZWwuPQpmaW5kKCIucXVvdGEtbWVzc2FnZSIpO2lmKCFqLmlzKCI6aGlkZGVuIikp e2ouc2xpZGVVcCh0aGlzLmZ4U3BlZWQpfX0sdG9TdHI9CmluZzpmdW5jdGlvbigpe3JldHVybiJD dXJyZW50SGlzdG9yeVBhbmVsKCIrKCh0aGlzLm1vZGVsKT8odGhpcy5tb2RlbC5nZXQoIj0KbmFt ZSIpKTooIiIpKSsiKSJ9fSk7aS5wcm90b3R5cGUudGVtcGxhdGVzPTNEKGZ1bmN0aW9uKCl7dmFy IGo9M0RoLndyYXBUZW1wPQpsYXRlKFsnPGRpdiBjbGFzcz0zRCJxdW90YS1tZXNzYWdlIGVycm9y bWVzc2FnZSI+JyxiKCJZb3UgYXJlIG92ZXIgeW91ciBkaXM9CmsgcXVvdGEiKSwiLiAiLGIoIlRv b2wgZXhlY3V0aW9uIGlzIG9uIGhvbGQgdW50aWwgeW91ciBkaXNrIHVzYWdlIGRyb3BzIGJlbD0K b3cgeW91ciBhbGxvY2F0ZWQgcXVvdGEiKSwiLiIsIjwvZGl2PiJdLCJoaXN0b3J5Iik7cmV0dXJu IF8uZXh0ZW5kKF8uY2xvbmUoPQpnLnByb3RvdHlwZS50ZW1wbGF0ZXMpLHtxdW90YU1zZzpqfSl9 KCkpO3JldHVybntDdXJyZW50SGlzdG9yeVBhbmVsOml9fSk7ClwgTm8gbmV3bGluZSBhdCBlbmQg b2YgZmlsZQorZGVmaW5lKFsibXZjL2hpc3RvcnkvaGlzdG9yeS1tb2RlbCIsIm12Yy9oaXN0b3J5 L2hpc3RvcnktcGFuZWwtZWRpdCIsIm12Yy89CmNvbGxlY3Rpb24vY29sbGVjdGlvbi1wYW5lbCIs Im12Yy9iYXNlLW12YyIsInV0aWxzL2xvY2FsaXphdGlvbiJdLGZ1bmN0aW9uKD0KZCxjLGEsaCxi KXt2YXIgZT0zRGguU2Vzc2lvblN0b3JhZ2VNb2RlbC5leHRlbmQoe2RlZmF1bHRzOnt0YWdzRWRp dG9yU2hvd246PQpmYWxzZSxhbm5vdGF0aW9uRWRpdG9yU2hvd246ZmFsc2Usc2Nyb2xsUG9zaXRp b246MH0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXQ9CnVybiJIaXN0b3J5UGFuZWxQcmVmcygiK0pT T04uc3RyaW5naWZ5KHRoaXMudG9KU09OKCkpKyIpIn19KTtlLnN0b3JhZ2VLZXk9Cj0zRGZ1bmN0 aW9uIGYoKXtyZXR1cm4oImhpc3RvcnktcGFuZWwiKX07dmFyIGc9M0RjLkhpc3RvcnlQYW5lbEVk aXQ7dmFyIGk9Cj0zRGcuZXh0ZW5kKHtjbGFzc05hbWU6Zy5wcm90b3R5cGUuY2xhc3NOYW1lKyIg Y3VycmVudC1oaXN0b3J5LXBhbmVsIixlbXB0eT0KTXNnOmIoIlRoaXMgaGlzdG9yeSBpcyBlbXB0 eS4gQ2xpY2sgJ0dldCBEYXRhJyBvbiB0aGUgbGVmdCB0b29sIG1lbnUgdG8gc3RhPQpydCIpLG5v bmVGb3VuZE1zZzpiKCJObyBtYXRjaGluZyBkYXRhc2V0cyBmb3VuZCIpLEhEQ0FWaWV3Q2xhc3M6 Zy5wcm90b3R5cGU9Ci5IRENBVmlld0NsYXNzLmV4dGVuZCh7Zm9sZG91dFN0eWxlOiJkcmlsbGRv d24ifSksaW5pdGlhbGl6ZTpmdW5jdGlvbihqKXtqPQo9M0RqfHx7fTt0aGlzLnByZWZlcmVuY2Vz PTNEbmV3IGUoXy5leHRlbmQoe2lkOmUuc3RvcmFnZUtleSgpfSxfLnBpY2soaixfLms9CmV5cyhl LnByb3RvdHlwZS5kZWZhdWx0cykpKSk7Zy5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMs aik7dGhpcy5wYW5lbD0KU3RhY2s9M0RbXTt0aGlzLmN1cnJlbnRDb250ZW50SWQ9M0RqLmN1cnJl bnRDb250ZW50SWR8fG51bGx9LF9zZXRVcExpc3RlbmVyPQpzOmZ1bmN0aW9uKCl7Zy5wcm90b3R5 cGUuX3NldFVwTGlzdGVuZXJzLmNhbGwodGhpcyk7dmFyIGo9M0R0aGlzO3RoaXMuJHNjcm89Cmxs Q29udGFpbmVyKCkub24oInNjcm9sbCIsZnVuY3Rpb24oayl7aWYoai4kZWwuaXMoIjp2aXNpYmxl Iikpe2oucHJlZmVyZW5jZT0Kcy5zZXQoInNjcm9sbFBvc2l0aW9uIiwkKHRoaXMpLnNjcm9sbFRv cCgpKX19KTt0aGlzLm9uKCJuZXctbW9kZWwiLGZ1bmN0aW9uPQooKXtqLnByZWZlcmVuY2VzLnNl dCgic2Nyb2xsUG9zaXRpb24iLDApfSl9LGxvYWRDdXJyZW50SGlzdG9yeTpmdW5jdGlvbihrKXs9 CnRoaXMuZGVidWcodGhpcysiLmxvYWRDdXJyZW50SGlzdG9yeSIpO3ZhciBqPTNEdGhpcztyZXR1 cm4gdGhpcy5sb2FkSGlzdG9yeT0KV2l0aERldGFpbHMoImN1cnJlbnQiLGspLnRoZW4oZnVuY3Rp b24obSxsKXtqLnRyaWdnZXIoImN1cnJlbnQtaGlzdG9yeSIsail9PQopfSxzd2l0Y2hUb0hpc3Rv cnk6ZnVuY3Rpb24obSxsKXt2YXIgaj0zRHRoaXMsaz0zRGZ1bmN0aW9uKCl7cmV0dXJuIGpRdWVy eS49CmdldEpTT04oZ2FsYXh5X2NvbmZpZy5yb290KyJoaXN0b3J5L3NldF9hc19jdXJyZW50P2lk PTNEIittKX07cmV0dXJuIHRoaXMubD0Kb2FkSGlzdG9yeVdpdGhEZXRhaWxzKG0sbCxrKS50aGVu KGZ1bmN0aW9uKG8sbil7ai50cmlnZ2VyKCJzd2l0Y2hlZC1oaXN0b3J5PQoiLGopfSl9LGNyZWF0 ZU5ld0hpc3Rvcnk6ZnVuY3Rpb24obCl7aWYoIUdhbGF4eXx8IUdhbGF4eS5jdXJyVXNlcnx8R2Fs YXh5LmM9CnVyclVzZXIuaXNBbm9ueW1vdXMoKSl7dGhpcy5kaXNwbGF5TWVzc2FnZSgiZXJyb3Ii LGIoIllvdSBtdXN0IGJlIGxvZ2dlZCBpbj0KIHRvIGNyZWF0ZSBoaXN0b3JpZXMiKSk7cmV0dXJu ICQud2hlbigpfXZhciBqPTNEdGhpcyxrPTNEZnVuY3Rpb24oKXtyZXR1cm4gPQpqUXVlcnkuZ2V0 SlNPTihnYWxheHlfY29uZmlnLnJvb3QrImhpc3RvcnkvY3JlYXRlX25ld19jdXJyZW50Iil9O3Jl dHVybiB0aGk9CnMubG9hZEhpc3RvcnkodW5kZWZpbmVkLGwsaykudGhlbihmdW5jdGlvbihuLG0p e2oudHJpZ2dlcigibmV3LWhpc3RvcnkiLGopfT0KKX0sc2V0TW9kZWw6ZnVuY3Rpb24oayxqLGwp e2cucHJvdG90eXBlLnNldE1vZGVsLmNhbGwodGhpcyxrLGosbCk7aWYodGhpcy5tPQpvZGVsKXt0 aGlzLmxvZygiY2hlY2tpbmcgZm9yIHVwZGF0ZXMiKTt0aGlzLm1vZGVsLmNoZWNrRm9yVXBkYXRl cygpfXJldHVybiA9CnRoaXN9LF9zZXRVcENvbGxlY3Rpb25MaXN0ZW5lcnM6ZnVuY3Rpb24oKXtn LnByb3RvdHlwZS5fc2V0VXBDb2xsZWN0aW9uTGlzdD0KZW5lcnMuY2FsbCh0aGlzKTt0aGlzLmNv bGxlY3Rpb24ub24oInN0YXRlOnJlYWR5IixmdW5jdGlvbihrLGwsail7aWYoKCFrLmdlPQp0KCJ2 aXNpYmxlIikpJiYoIXRoaXMuc3RvcmFnZS5nZXQoInNob3dfaGlkZGVuIikpKXt0aGlzLnJlbW92 ZUl0ZW1WaWV3KGspfX09Cix0aGlzKX0sX3NldFVwTW9kZWxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtn LnByb3RvdHlwZS5fc2V0VXBNb2RlbExpc3RlbmVycy5jYT0KbGwodGhpcyk7aWYoR2FsYXh5JiZH YWxheHkucXVvdGFNZXRlcil7dGhpcy5saXN0ZW5Ubyh0aGlzLm1vZGVsLCJjaGFuZ2U6bmljPQpl X3NpemUiLGZ1bmN0aW9uKCl7R2FsYXh5LnF1b3RhTWV0ZXIudXBkYXRlKCl9KX19LF9idWlsZE5l d1JlbmRlcjpmdW5jdGlvbig9Cil7aWYoIXRoaXMubW9kZWwpe3JldHVybiAkKCl9dmFyIGo9M0Rn LnByb3RvdHlwZS5fYnVpbGROZXdSZW5kZXIuY2FsbCh0aGlzKT0KO2ouZmluZCgiLnNlYXJjaCIp LnByZXBlbmRUbyhqLmZpbmQoIi5jb250cm9scyIpKTt0aGlzLl9yZW5kZXJRdW90YU1lc3NhZ2Uo PQpqKTtyZXR1cm4gan0sX3JlbmRlclF1b3RhTWVzc2FnZTpmdW5jdGlvbihqKXtqPTNEanx8dGhp cy4kZWw7cmV0dXJuICQodGhpcy49CnRlbXBsYXRlcy5xdW90YU1zZyh7fSx0aGlzKSkucHJlcGVu ZFRvKGouZmluZCgiLm1lc3NhZ2VzIikpfSxfcmVuZGVyRW1wdHlNZT0Kc3NhZ2U6ZnVuY3Rpb24o bCl7dmFyIGs9M0R0aGlzLGo9M0RrLiRlbXB0eU1lc3NhZ2UobCksbT0zRCQoIi50b29sTWVudUNv bnRhPQppbmVyIik7aWYoKF8uaXNFbXB0eShrLnZpZXdzKSYmIWsuc2VhcmNoRm9yKSYmKEdhbGF4 eSYmR2FsYXh5LnVwbG9hZCYmbS5zaXo9CmUoKSkpe2ouZW1wdHkoKTtqLmh0bWwoW2IoIlRoaXMg aGlzdG9yeSBpcyBlbXB0eSIpLCIuICIsYigiWW91IGNhbiAiKSwnPGEgYz0KbGFzcz0zRCJ1cGxv YWRlci1saW5rIiBocmVmPTNEImphdmFzY3JpcHQ6dm9pZCgwKSI+JyxiKCJsb2FkIHlvdXIgb3du IGRhdGEiPQopLCI8L2E+IixiKCIgb3IgIiksJzxhIGNsYXNzPTNEImdldC1kYXRhLWxpbmsiIGhy ZWY9M0QiamF2YXNjcmlwdDp2b2lkKDApIj49CicsYigiZ2V0IGRhdGEgZnJvbSBhbiBleHRlcm5h bCBzb3VyY2UiKSwiPC9hPiJdLmpvaW4oIiIpKTtqLmZpbmQoIi51cGxvYWRlcj0KLWxpbmsiKS5j bGljayhmdW5jdGlvbihuKXtHYWxheHkudXBsb2FkLnNob3cobil9KTtqLmZpbmQoIi5nZXQtZGF0 YS1saW5rIikuPQpjbGljayhmdW5jdGlvbihuKXttLnBhcmVudCgpLnNjcm9sbFRvcCgwKTttLmZp bmQoJ3NwYW46Y29udGFpbnMoIkdldCBEYXRhIik9CicpLmNsaWNrKCl9KTtyZXR1cm4gai5zaG93 KCl9cmV0dXJuIGcucHJvdG90eXBlLl9yZW5kZXJFbXB0eU1lc3NhZ2UuY2FsbCh0aD0KaXMsbCl9 LF9yZW5kZXJUYWdzOmZ1bmN0aW9uKGope3ZhciBrPTNEdGhpcztnLnByb3RvdHlwZS5fcmVuZGVy VGFncy5jYWxsKHRoPQppcyxqKTtpZih0aGlzLnByZWZlcmVuY2VzLmdldCgidGFnc0VkaXRvclNo b3duIikpe3RoaXMudGFnc0VkaXRvci50b2dnbGUodHI9CnVlKX10aGlzLnRhZ3NFZGl0b3Iub24o ImhpZGRlblVudGlsQWN0aXZhdGVkOnNob3duIGhpZGRlblVudGlsQWN0aXZhdGVkOmhpZD0KZGVu IixmdW5jdGlvbihsKXtrLnByZWZlcmVuY2VzLnNldCgidGFnc0VkaXRvclNob3duIixsLmhpZGRl bil9KX0sX3JlbmRlckFuPQpub3RhdGlvbjpmdW5jdGlvbihqKXt2YXIgaz0zRHRoaXM7Zy5wcm90 b3R5cGUuX3JlbmRlckFubm90YXRpb24uY2FsbCh0aGlzLGo9Cik7aWYodGhpcy5wcmVmZXJlbmNl cy5nZXQoImFubm90YXRpb25FZGl0b3JTaG93biIpKXt0aGlzLmFubm90YXRpb25FZGl0b3IudD0K b2dnbGUodHJ1ZSl9dGhpcy5hbm5vdGF0aW9uRWRpdG9yLm9uKCJoaWRkZW5VbnRpbEFjdGl2YXRl ZDpzaG93biBoaWRkZW5VbnRpPQpsQWN0aXZhdGVkOmhpZGRlbiIsZnVuY3Rpb24obCl7ay5wcmVm ZXJlbmNlcy5zZXQoImFubm90YXRpb25FZGl0b3JTaG93biIsbC49CmhpZGRlbil9KX0sX3N3YXBO ZXdSZW5kZXI6ZnVuY3Rpb24oayl7Zy5wcm90b3R5cGUuX3N3YXBOZXdSZW5kZXIuY2FsbCh0aGlz LD0Kayk7dmFyIGo9M0R0aGlzO18uZGVsYXkoZnVuY3Rpb24oKXt2YXIgbD0zRGoucHJlZmVyZW5j ZXMuZ2V0KCJzY3JvbGxQb3NpdGlvPQpuIik7aWYobCl7ai5zY3JvbGxUbyhsKX19LDEwKTtyZXR1 cm4gdGhpc30sX2F0dGFjaEl0ZW1zOmZ1bmN0aW9uKGspe2cucHJvdG89CnR5cGUuX2F0dGFjaEl0 ZW1zLmNhbGwodGhpcyxrKTt2YXIgaj0zRHRoaXMsbDtpZihqLmN1cnJlbnRDb250ZW50SWQmJihs PTNEaj0KLnZpZXdGcm9tTW9kZWxJZChqLmN1cnJlbnRDb250ZW50SWQpKSl7ai5zZXRDdXJyZW50 Q29udGVudChsKX1yZXR1cm4gdGhpc30sPQphZGRJdGVtVmlldzpmdW5jdGlvbihsLG0sayl7dmFy IGo9M0RnLnByb3RvdHlwZS5hZGRJdGVtVmlldy5jYWxsKHRoaXMsbCxtLGs9Cik7aWYoIWope3Jl dHVybiBqfWlmKHRoaXMucGFuZWxTdGFjay5sZW5ndGgpe3JldHVybiB0aGlzLl9jb2xsYXBzZURy aWxsZG93bj0KUGFuZWwoKX1yZXR1cm4gan0sX3NldFVwSXRlbVZpZXdMaXN0ZW5lcnM6ZnVuY3Rp b24oayl7dmFyIGo9M0R0aGlzO2cucHJvdG90PQp5cGUuX3NldFVwSXRlbVZpZXdMaXN0ZW5lcnMu Y2FsbChqLGspO2sub24oImV4cGFuZGVkOmRyaWxsZG93biIsZnVuY3Rpb24obSw9Cmwpe3RoaXMu X2V4cGFuZERyaWxsZG93blBhbmVsKGwpfSx0aGlzKTtrLm9uKCJjb2xsYXBzZWQ6ZHJpbGxkb3du IixmdW5jdGlvbj0KKG0sbCl7dGhpcy5fY29sbGFwc2VEcmlsbGRvd25QYW5lbChsKX0sdGhpcyk7 ay5vbigiZGlzcGxheSBlZGl0IHBhcmFtcyByZXJ1PQpuIHJlcG9ydC1lcnIgdmlzdWFsaXplIixm dW5jdGlvbihsLG0pe3RoaXMuc2V0Q3VycmVudENvbnRlbnQobCl9LHRoaXMpO3JldHU9CnJuIHRo aXN9LHNldEN1cnJlbnRDb250ZW50OmZ1bmN0aW9uKGope3RoaXMuJCgiLmhpc3RvcnktY29udGVu dC5jdXJyZW50LWNvbj0KdGVudCIpLnJlbW92ZUNsYXNzKCJjdXJyZW50LWNvbnRlbnQiKTtpZihq KXtqLiRlbC5hZGRDbGFzcygiY3VycmVudC1jb250ZW50PQoiKTt0aGlzLmN1cnJlbnRDb250ZW50 SWQ9M0RqLm1vZGVsLmlkfWVsc2V7dGhpcy5jdXJyZW50Q29udGVudElkPTNEbnVsbH19LF89CmV4 cGFuZERyaWxsZG93blBhbmVsOmZ1bmN0aW9uKGope3RoaXMucGFuZWxTdGFjay5wdXNoKGopO3Ro aXMuJCgiPiAuY29udHJvbD0KcyIpLmFkZCh0aGlzLiRsaXN0KCkpLmhpZGUoKTtqLnBhcmVudE5h bWU9M0R0aGlzLm1vZGVsLmdldCgibmFtZSIpO3RoaXMuJGVsPQouYXBwZW5kKGoucmVuZGVyKCku JGVsKX0sX2NvbGxhcHNlRHJpbGxkb3duUGFuZWw6ZnVuY3Rpb24oail7dGhpcy5wYW5lbFN0YWM9 CmsucG9wKCk7dGhpcy5yZW5kZXIoKX0sY29ubmVjdFRvUXVvdGFNZXRlcjpmdW5jdGlvbihqKXtp Zighail7cmV0dXJuIHRoaXN9dD0KaGlzLmxpc3RlblRvKGosInF1b3RhOm92ZXIiLHRoaXMuc2hv d1F1b3RhTWVzc2FnZSk7dGhpcy5saXN0ZW5UbyhqLCJxdW90YTp1PQpuZGVyIix0aGlzLmhpZGVR dW90YU1lc3NhZ2UpO3RoaXMub24oInJlbmRlcmVkIHJlbmRlcmVkOmluaXRpYWwiLGZ1bmN0aW9u KCk9CntpZihqJiZqLmlzT3ZlclF1b3RhKCkpe3RoaXMuc2hvd1F1b3RhTWVzc2FnZSgpfX0pO3Jl dHVybiB0aGlzfSxjbGVhck1lc3NhZz0KZXM6ZnVuY3Rpb24oayl7dmFyIGo9M0QhXy5pc1VuZGVm aW5lZChrKT8kKGsuY3VycmVudFRhcmdldCk6dGhpcy4kbWVzc2FnZXMoPQopLmNoaWxkcmVuKCdb Y2xhc3MkPTNEIm1lc3NhZ2UiXScpO2o9M0RqLm5vdCgiLnF1b3RhLW1lc3NhZ2UiKTtqLmZhZGVP dXQodGg9CmlzLmZ4U3BlZWQsZnVuY3Rpb24oKXskKHRoaXMpLnJlbW92ZSgpfSk7cmV0dXJuIHRo aXN9LHNob3dRdW90YU1lc3NhZ2U6ZnVuYz0KdGlvbigpe3ZhciBqPTNEdGhpcy4kKCIucXVvdGEt bWVzc2FnZSIpO2lmKGouaXMoIjpoaWRkZW4iKSl7ai5zbGlkZURvd24odGhpPQpzLmZ4U3BlZWQp fX0saGlkZVF1b3RhTWVzc2FnZTpmdW5jdGlvbigpe3ZhciBqPTNEdGhpcy4kKCIucXVvdGEtbWVz c2FnZSIpO2k9CmYoIWouaXMoIjpoaWRkZW4iKSl7ai5zbGlkZVVwKHRoaXMuZnhTcGVlZCl9fSx0 b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJDdT0KcnJlbnRIaXN0b3J5UGFuZWwoIisoKHRoaXMu bW9kZWwpPyh0aGlzLm1vZGVsLmdldCgibmFtZSIpKTooIiIpKSsiKSJ9fSk7aS5wPQpyb3RvdHlw ZS50ZW1wbGF0ZXM9M0QoZnVuY3Rpb24oKXt2YXIgaj0zRGgud3JhcFRlbXBsYXRlKFsnPGRpdiBj bGFzcz0zRCJxdW89CnRhLW1lc3NhZ2UgZXJyb3JtZXNzYWdlIj4nLGIoIllvdSBhcmUgb3ZlciB5 b3VyIGRpc2sgcXVvdGEiKSwiLiAiLGIoIlRvb2wgZT0KeGVjdXRpb24gaXMgb24gaG9sZCB1bnRp bCB5b3VyIGRpc2sgdXNhZ2UgZHJvcHMgYmVsb3cgeW91ciBhbGxvY2F0ZWQgcXVvdGEiPQopLCIu IiwiPC9kaXY+Il0sImhpc3RvcnkiKTtyZXR1cm4gXy5leHRlbmQoXy5jbG9uZShnLnByb3RvdHlw ZS50ZW1wbGF0ZXMpLHs9CnF1b3RhTXNnOmp9KX0oKSk7cmV0dXJue0N1cnJlbnRIaXN0b3J5UGFu ZWw6aX19KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpkaWZmIC1yIDVlYTlmYzJmNzVh YWU4ZTUyZTE2NGFiNzVjNzFhYzk3ZjgyYmZmMjQgLXIgYjE4ZmNlNjk4Y2EwYjI5YWFjYTc3MzM9 CmNmOWJhOTViNjVjNTZjYTQ4IHN0YXRpYy9zY3JpcHRzL3BhY2tlZC9tdmMvaGlzdG9yeS9oaXN0 b3J5LXBhbmVsLmpzCi0tLSBhL3N0YXRpYy9zY3JpcHRzL3BhY2tlZC9tdmMvaGlzdG9yeS9oaXN0 b3J5LXBhbmVsLmpzCisrKyBiL3N0YXRpYy9zY3JpcHRzL3BhY2tlZC9tdmMvaGlzdG9yeS9oaXN0 b3J5LXBhbmVsLmpzCkBAIC0xLDEgKzEsMSBAQAotZGVmaW5lKFsibXZjL2xpc3QvbGlzdC1wYW5l bCIsIm12Yy9oaXN0b3J5L2hpc3RvcnktbW9kZWwiLCJtdmMvaGlzdG9yeS9oaXM9CnRvcnktY29u dGVudHMiLCJtdmMvaGlzdG9yeS9oZGEtbGkiLCJtdmMvaGlzdG9yeS9oZGNhLWxpIiwibXZjL2Nv bGxlY3Rpb24vYz0Kb2xsZWN0aW9uLXBhbmVsIiwibXZjL3VzZXIvdXNlci1tb2RlbCIsInVpL2Zh LWljb24tYnV0dG9uIiwibXZjL3VpL3BvcHVwLW1lPQpudSIsIm12Yy9iYXNlLW12YyIsInV0aWxz L2xvY2FsaXphdGlvbiIsInVpL3NlYXJjaC1pbnB1dCJdLGZ1bmN0aW9uKGYsaCxuLGQ9CixiLG8s aSxjLGEscSxnKXt2YXIgbD0zRHEuU2Vzc2lvblN0b3JhZ2VNb2RlbC5leHRlbmQoe2RlZmF1bHRz OntleHBhbmRlZElkcz0KOnt9LHNob3dfZGVsZXRlZDpmYWxzZSxzaG93X2hpZGRlbjpmYWxzZX0s YWRkRXhwYW5kZWQ6ZnVuY3Rpb24ocil7dmFyIHM9M0QiPQpleHBhbmRlZElkcyI7dGhpcy5zYXZl KHMsXy5leHRlbmQodGhpcy5nZXQocyksXy5vYmplY3QoW3IuaWRdLFtyLmdldCgiaWQiKV09Cikp KX0scmVtb3ZlRXhwYW5kZWQ6ZnVuY3Rpb24ocil7dmFyIHM9M0QiZXhwYW5kZWRJZHMiO3RoaXMu c2F2ZShzLF8ub21pdCh0aD0KaXMuZ2V0KHMpLHIuaWQpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXty ZXR1cm4iSGlzdG9yeVByZWZzKCIrdGhpcy5pZCsiKSJ9fSk7PQpsLnN0b3JhZ2VLZXlQcmVmaXg9 M0QiaGlzdG9yeToiO2wuaGlzdG9yeVN0b3JhZ2VLZXk9M0RmdW5jdGlvbiBqKHIpe2lmKCFyKXs9 CnRocm93IG5ldyBFcnJvcigiSGlzdG9yeVByZWZzLmhpc3RvcnlTdG9yYWdlS2V5IG5lZWRzIHZh bGlkIGlkOiAiK3IpfXJldHVybj0KKGwuc3RvcmFnZUtleVByZWZpeCtyKX07bC5nZXQ9M0RmdW5j dGlvbiBlKHIpe3JldHVybiBuZXcgbCh7aWQ6bC5oaXN0b3J5U3RvPQpyYWdlS2V5KHIpfSl9O2wu Y2xlYXJBbGw9M0RmdW5jdGlvbiBrKHMpe2Zvcih2YXIgciBpbiBzZXNzaW9uU3RvcmFnZSl7aWYo ci49CmluZGV4T2YobC5zdG9yYWdlS2V5UHJlZml4KT0zRD0zRD0zRDApe3Nlc3Npb25TdG9yYWdl LnJlbW92ZUl0ZW0ocil9fX07dmFyID0KcD0zRGYuTW9kZWxMaXN0UGFuZWw7dmFyIG09M0RwLmV4 dGVuZCh7SERBVmlld0NsYXNzOmQuSERBTGlzdEl0ZW1WaWV3LEhEQ0FWPQppZXdDbGFzczpiLkhE Q0FMaXN0SXRlbVZpZXcsY29sbGVjdGlvbkNsYXNzOm4uSGlzdG9yeUNvbnRlbnRzLG1vZGVsQ29s bGVjdGk9Cm9uS2V5OiJjb250ZW50cyIsdGFnTmFtZToiZGl2IixjbGFzc05hbWU6cC5wcm90b3R5 cGUuY2xhc3NOYW1lKyIgaGlzdG9yeS1wYT0KbmVsIixlbXB0eU1zZzpnKCJUaGlzIGhpc3Rvcnkg aXMgZW1wdHkiKSxub25lRm91bmRNc2c6ZygiTm8gbWF0Y2hpbmcgZGF0YXNlPQp0cyBmb3VuZCIp LHNlYXJjaFBsYWNlaG9sZGVyOmcoInNlYXJjaCBkYXRhc2V0cyIpLGluaXRpYWxpemU6ZnVuY3Rp b24ocil7cC49CnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyxyKTt0aGlzLmxpbmtUYXJn ZXQ9M0RyLmxpbmtUYXJnZXR8fCJfYmxhbmsifT0KLGZyZWVNb2RlbDpmdW5jdGlvbigpe3AucHJv dG90eXBlLmZyZWVNb2RlbC5jYWxsKHRoaXMpO2lmKHRoaXMubW9kZWwpe3RoaXMuPQptb2RlbC5j bGVhclVwZGF0ZVRpbWVvdXQoKX1yZXR1cm4gdGhpc30sX3NldFVwTGlzdGVuZXJzOmZ1bmN0aW9u KCl7cC5wcm90b3Q9CnlwZS5fc2V0VXBMaXN0ZW5lcnMuY2FsbCh0aGlzKTt0aGlzLm9uKCJlcnJv ciIsZnVuY3Rpb24ocyx2LHIsdSx0KXt0aGlzLmVycj0Kb3JIYW5kbGVyKHMsdixyLHUsdCl9KTt0 aGlzLm9uKCJsb2FkaW5nLWRvbmUiLGZ1bmN0aW9uKCl7aWYoIXRoaXMudmlld3MubGVuPQpndGgp e3RoaXMudHJpZ2dlcigiZW1wdHktaGlzdG9yeSIsdGhpcyl9fSl9LGxvYWRIaXN0b3J5V2l0aERl dGFpbHM6ZnVuY3Rpb249Cih1LHQscyx2KXt0aGlzLmluZm8oImxvYWRIaXN0b3J5V2l0aERldGFp bHM6Iix1LHQscyx2KTt2YXIgcj0zRGZ1bmN0aW9uKHcpez0KcmV0dXJuIF8udmFsdWVzKGwuZ2V0 KHcuaWQpLmdldCgiZXhwYW5kZWRJZHMiKSl9O3JldHVybiB0aGlzLmxvYWRIaXN0b3J5KHUsPQp0 LHMsdixyKX0sbG9hZEhpc3Rvcnk6ZnVuY3Rpb24odix1LHQsdyxyKXt0aGlzLmluZm8oImxvYWRI aXN0b3J5OiIsdix1LHQsdyw9CnIpO3ZhciBzPTNEdGhpczt1PTNEdXx8e307cy50cmlnZ2VyKCJs b2FkaW5nIixzKTt2YXIgeD0zRGguSGlzdG9yeS5nZXRIaXN0bz0KcnlEYXRhKHYse2hpc3RvcnlG bjp0LGNvbnRlbnRzRm46dyxkZXRhaWxJZHNGbjp1LmluaXRpYWxseUV4cGFuZGVkfHxyfSk7cmV0 PQp1cm4gcy5fbG9hZEhpc3RvcnlGcm9tWEhSKHgsdSkuZmFpbChmdW5jdGlvbihBLHkseil7cy50 cmlnZ2VyKCJlcnJvciIscyxBLHU9CixnKCJBbiBlcnJvciB3YXMgZW5jb3VudGVyZWQgd2hpbGUg Iit5KSx7aGlzdG9yeUlkOnYsaGlzdG9yeTp6fHx7fX0pfSkuYWx3YT0KeXMoZnVuY3Rpb24oKXtz LnRyaWdnZXIoImxvYWRpbmctZG9uZSIscyl9KX0sX2xvYWRIaXN0b3J5RnJvbVhIUjpmdW5jdGlv bih0PQoscyl7dmFyIHI9M0R0aGlzO3QudGhlbihmdW5jdGlvbih1LHYpe3IuSlNPTlRvTW9kZWwo dSx2LHMpO3IucmVuZGVyKCl9KTt0LmY9CmFpbChmdW5jdGlvbih2LHUpe3IucmVuZGVyKCl9KTty ZXR1cm4gdH0scmVmcmVzaENvbnRlbnRzOmZ1bmN0aW9uKHMscil7aWYodD0KaGlzLm1vZGVsKXty ZXR1cm4gdGhpcy5tb2RlbC5yZWZyZXNoKHMscil9cmV0dXJuICQud2hlbigpfSxKU09OVG9Nb2Rl bDpmdW5jPQp0aW9uKHUscixzKXt0aGlzLmxvZygiSlNPTlRvTW9kZWw6Iix1LHIscyk7cz0zRHN8 fHt9O3ZhciB0PTNEbmV3IGguSGlzdG9yeSg9CnUscixzKTt0aGlzLnNldE1vZGVsKHQpO3JldHVy biB0fSxzZXRNb2RlbDpmdW5jdGlvbihzLHIpe3I9M0RyfHx7fTtwLnByb3RvdD0KeXBlLnNldE1v ZGVsLmNhbGwodGhpcyxzLHIpO2lmKHRoaXMubW9kZWwpe3RoaXMuX3NldFVwV2ViU3RvcmFnZShy LmluaXRpYWxsPQp5RXhwYW5kZWQsci5zaG93X2RlbGV0ZWQsci5zaG93X2hpZGRlbil9fSxfc2V0 VXBXZWJTdG9yYWdlOmZ1bmN0aW9uKHMscix0KXs9CmlmKHRoaXMuc3RvcmFnZSl7dGhpcy5zdG9w TGlzdGVuaW5nKHRoaXMuc3RvcmFnZSl9dGhpcy5zdG9yYWdlPTNEbmV3IGwoe2lkOj0KbC5oaXN0 b3J5U3RvcmFnZUtleSh0aGlzLm1vZGVsLmdldCgiaWQiKSl9KTtpZihfLmlzT2JqZWN0KHMpKXt0 aGlzLnN0b3JhZ2UuPQpzZXQoImV4cGFuZGVkSWRzIixzKX1pZihfLmlzQm9vbGVhbihyKSl7dGhp cy5zdG9yYWdlLnNldCgic2hvd19kZWxldGVkIixyKX09CmlmKF8uaXNCb29sZWFuKHQpKXt0aGlz LnN0b3JhZ2Uuc2V0KCJzaG93X2hpZGRlbiIsdCl9dGhpcy50cmlnZ2VyKCJuZXctc3Rvcj0KYWdl Iix0aGlzLnN0b3JhZ2UsdGhpcyk7dGhpcy5sb2codGhpcysiIChpbml0J2QpIHN0b3JhZ2U6Iix0 aGlzLnN0b3JhZ2UuZ2V0PQooKSk7dGhpcy5saXN0ZW5Ubyh0aGlzLnN0b3JhZ2UseyJjaGFuZ2U6 c2hvd19kZWxldGVkIjpmdW5jdGlvbih1LHYpe3RoaXMuc2g9Cm93RGVsZXRlZD0zRHZ9LCJjaGFu Z2U6c2hvd19oaWRkZW4iOmZ1bmN0aW9uKHUsdil7dGhpcy5zaG93SGlkZGVuPTNEdn19LHRoaT0K cyk7dGhpcy5zaG93RGVsZXRlZD0zRChyIT0zRD0zRHVuZGVmaW5lZCk/cjp0aGlzLnN0b3JhZ2Uu Z2V0KCJzaG93X2RlbGV0ZWQiPQopO3RoaXMuc2hvd0hpZGRlbj0zRCh0IT0zRD0zRHVuZGVmaW5l ZCk/dDp0aGlzLnN0b3JhZ2UuZ2V0KCJzaG93X2hpZGRlbiIpO3I9CmV0dXJuIHRoaXN9LF9idWls ZE5ld1JlbmRlcjpmdW5jdGlvbigpe3ZhciByPTNEcC5wcm90b3R5cGUuX2J1aWxkTmV3UmVuZGVy Lj0KY2FsbCh0aGlzKTtpZih0aGlzLm11bHRpc2VsZWN0QWN0aW9ucygpLmxlbmd0aCl7ci5maW5k KCIuY29udHJvbHMgLmFjdGlvbnMiPQopLnByZXBlbmQodGhpcy5fcmVuZGVyU2VsZWN0QnV0dG9u KCkpfXJldHVybiByfSxfcmVuZGVyU2VsZWN0QnV0dG9uOmZ1bmN0aW89Cm4ocil7cmV0dXJuIGMo e3RpdGxlOmcoIk9wZXJhdGlvbnMgb24gbXVsdGlwbGUgZGF0YXNldHMiKSxjbGFzc2VzOiJzaG93 LXNlbD0KZWN0b3JzLWJ0biIsZmFJY29uOiJmYS1jaGVjay1zcXVhcmUtbyJ9KX0sX2dldEl0ZW1W aWV3Q2xhc3M6ZnVuY3Rpb24ocil7dmFyPQogcz0zRHIuZ2V0KCJoaXN0b3J5X2NvbnRlbnRfdHlw ZSIpO3N3aXRjaChzKXtjYXNlImRhdGFzZXQiOnJldHVybiB0aGlzLkhEQVY9Cmlld0NsYXNzO2Nh c2UiZGF0YXNldF9jb2xsZWN0aW9uIjpyZXR1cm4gdGhpcy5IRENBVmlld0NsYXNzfXRocm93IG5l dyBUeXBlRT0KcnJvcigiVW5rbm93biBoaXN0b3J5X2NvbnRlbnRfdHlwZTogIitzKX0sX2ZpbHRl ckl0ZW06ZnVuY3Rpb24ocyl7dmFyIHI9M0R0PQpoaXM7cmV0dXJuKHAucHJvdG90eXBlLl9maWx0 ZXJJdGVtLmNhbGwocixzKSYmKCFzLmhpZGRlbigpfHxyLnNob3dIaWRkZW4pJiY9Cighcy5pc0Rl bGV0ZWRPclB1cmdlZCgpfHxyLnNob3dEZWxldGVkKSl9LF9nZXRJdGVtVmlld09wdGlvbnM6ZnVu Y3Rpb24ocyl7dj0KYXIgcj0zRHAucHJvdG90eXBlLl9nZXRJdGVtVmlld09wdGlvbnMuY2FsbCh0 aGlzLHMpO3JldHVybiBfLmV4dGVuZChyLHtsaW5rPQpUYXJnZXQ6dGhpcy5saW5rVGFyZ2V0LGV4 cGFuZGVkOiEhdGhpcy5zdG9yYWdlLmdldCgiZXhwYW5kZWRJZHMiKVtzLmlkXSxoYXM9ClVzZXI6 dGhpcy5tb2RlbC5vd25lZEJ5Q3VyclVzZXIoKX0pfSxfc2V0VXBJdGVtVmlld0xpc3RlbmVyczpm dW5jdGlvbihzKXt2YT0KciByPTNEdGhpcztwLnByb3RvdHlwZS5fc2V0VXBJdGVtVmlld0xpc3Rl bmVycy5jYWxsKHIscyk7cy5vbigiZXhwYW5kZWQiLGZ1PQpuY3Rpb24odCl7ci5zdG9yYWdlLmFk ZEV4cGFuZGVkKHQubW9kZWwpfSk7cy5vbigiY29sbGFwc2VkIixmdW5jdGlvbih0KXtyLnM9CnRv cmFnZS5yZW1vdmVFeHBhbmRlZCh0Lm1vZGVsKX0pO3JldHVybiB0aGlzfSxnZXRTZWxlY3RlZE1v ZGVsczpmdW5jdGlvbigpez0KdmFyIHI9M0RwLnByb3RvdHlwZS5nZXRTZWxlY3RlZE1vZGVscy5j YWxsKHRoaXMpO3IuaGlzdG9yeUlkPTNEdGhpcy5jb2xsZWN0PQppb24uaGlzdG9yeUlkO3JldHVy biByfSxldmVudHM6Xy5leHRlbmQoXy5jbG9uZShwLnByb3RvdHlwZS5ldmVudHMpLHsiY2xpY2s9 CiAuc2hvdy1zZWxlY3RvcnMtYnRuIjoidG9nZ2xlU2VsZWN0b3JzIn0pLHRvZ2dsZVNob3dEZWxl dGVkOmZ1bmN0aW9uKHIscyl7cj0KPTNEKHIhPTNEPTNEdW5kZWZpbmVkKT8ocik6KCF0aGlzLnNo b3dEZWxldGVkKTtzPTNEKHMhPTNEPTNEdW5kZWZpbmVkKT8ocyk6PQoodHJ1ZSk7dGhpcy5zaG93 RGVsZXRlZD0zRHI7aWYocyl7dGhpcy5zdG9yYWdlLnNldCgic2hvd19kZWxldGVkIixyKX10aGlz LnQ9CnJpZ2dlcigic2hvdy1oaWRkZW4iLHIpO3RoaXMucmVuZGVySXRlbXMoKTtyZXR1cm4gdGhp cy5zaG93RGVsZXRlZH0sdG9nZ2xlUz0KaG93SGlkZGVuOmZ1bmN0aW9uKHIscyl7cj0zRChyIT0z RD0zRHVuZGVmaW5lZCk/KHIpOighdGhpcy5zaG93SGlkZGVuKTtzPTNEPQoocyE9M0Q9M0R1bmRl ZmluZWQpPyhzKToodHJ1ZSk7dGhpcy5zaG93SGlkZGVuPTNEcjtpZihzKXt0aGlzLnN0b3JhZ2Uu c2V0KCI9CnNob3dfaGlkZGVuIixyKX10aGlzLnRyaWdnZXIoInNob3ctaGlkZGVuIixyKTt0aGlz LnJlbmRlckl0ZW1zKCk7cmV0dXJuIHRoaT0Kcy5zaG93SGlkZGVufSxfZmlyc3RTZWFyY2g6ZnVu Y3Rpb24ocil7dmFyIHM9M0R0aGlzLHQ9M0QiLmhpc3Rvcnktc2VhcmNoLWluPQpwdXQiO3RoaXMu bG9nKCJvbkZpcnN0U2VhcmNoIixyKTtpZihzLm1vZGVsLmNvbnRlbnRzLmhhdmVEZXRhaWxzKCkp e3Muc2VhcmM9CmhJdGVtcyhyKTtyZXR1cm59cy4kZWwuZmluZCh0KS5zZWFyY2hJbnB1dCgidG9n Z2xlLWxvYWRpbmciKTtzLm1vZGVsLmNvbnRlbj0KdHMuZmV0Y2hBbGxEZXRhaWxzKHtzaWxlbnQ6 dHJ1ZX0pLmFsd2F5cyhmdW5jdGlvbigpe3MuJGVsLmZpbmQodCkuc2VhcmNoSW5wPQp1dCgidG9n Z2xlLWxvYWRpbmciKX0pLmRvbmUoZnVuY3Rpb24oKXtzLnNlYXJjaEl0ZW1zKHIpfSl9LGVycm9y SGFuZGxlcjpmdW49CmN0aW9uKHQsdyxzLHYsdSl7dGhpcy5lcnJvcih0LHcscyx2LHUpO2lmKHcm Jncuc3RhdHVzPTNEPTNEPTNEMCYmdy5yZWFkeVN0YT0KdGU9M0Q9M0Q9M0QwKXt9ZWxzZXtpZih3 JiZ3LnN0YXR1cz0zRD0zRD0zRDUwMil7fWVsc2V7dmFyIHI9M0R0aGlzLl9wYXJzZUVyPQpyb3JN ZXNzYWdlKHQsdyxzLHYsdSk7aWYoIXRoaXMuJG1lc3NhZ2VzKCkuaXMoIjp2aXNpYmxlIikpe3Ro aXMub25jZSgicmVuZGU9CnJlZCIsZnVuY3Rpb24oKXt0aGlzLmRpc3BsYXlNZXNzYWdlKCJlcnJv ciIsci5tZXNzYWdlLHIuZGV0YWlscyl9KX1lbHNle3RoaT0Kcy5kaXNwbGF5TWVzc2FnZSgiZXJy b3IiLHIubWVzc2FnZSxyLmRldGFpbHMpfX19fSxfcGFyc2VFcnJvck1lc3NhZ2U6ZnVuY3RpPQpv bih2LHkseix0LHIsdyl7dmFyIHU9M0RHYWxheHkuY3VyclVzZXIseD0zRHttZXNzYWdlOnRoaXMu X2JlUG9saXRlKHQpLGRldGE9Cmlsczp7bWVzc2FnZTp0LHJhdmVuOih3aW5kb3cuUmF2ZW4mJl8u aXNGdW5jdGlvbihSYXZlbi5sYXN0RXZlbnRJZCkpPyhSYXZlbj0KLmxhc3RFdmVudElkKCkpOih1 bmRlZmluZWQpLGFnZW50Om5hdmlnYXRvci51c2VyQWdlbnQsdXJsOih3aW5kb3cuR2FsYXh5KT8o PQpHYWxheHkubGFzdEFqYXgudXJsKToodW5kZWZpbmVkKSxkYXRhOih3aW5kb3cuR2FsYXh5KT8o R2FsYXh5Lmxhc3RBamF4LmRhdGE9Cik6KHVuZGVmaW5lZCksb3B0aW9uczooeSk/KF8ub21pdCh6 LCJ4aHIiKSk6KHopLHhocjp5LHNvdXJjZTooXy5pc0Z1bmN0aW9uKD0Kdi50b0pTT04pKT8odi50 b0pTT04oKSk6KHYrIiIpLHVzZXI6KHUgaW5zdGFuY2VvZiBpLlVzZXIpPyh1LnRvSlNPTigpKToo dSsiPQoiKX19O18uZXh0ZW5kKHguZGV0YWlscyxyfHx7fSk7aWYoeSYmXy5pc0Z1bmN0aW9uKHku Z2V0QWxsUmVzcG9uc2VIZWFkZXJzKSk9Cnt2YXIgcz0zRHkuZ2V0QWxsUmVzcG9uc2VIZWFkZXJz KCk7cz0zRF8uY29tcGFjdChzLnNwbGl0KCJcbiIpKTtzPTNEXy5tYXAocz0KLGZ1bmN0aW9uKEEp e3JldHVybiBBLnNwbGl0KCI6ICIpfSk7eC5kZXRhaWxzLnhoci5yZXNwb25zZUhlYWRlcnM9M0Rf Lm9iamVjPQp0KHMpfXJldHVybiB4fSxfYmVQb2xpdGU6ZnVuY3Rpb24ocil7cj0zRHJ8fGcoIkFu IGVycm9yIG9jY3VycmVkIHdoaWxlIGdldHQ9CmluZyB1cGRhdGVzIGZyb20gdGhlIHNlcnZlciIp O3JldHVybiByKyIuICIrZygiUGxlYXNlIGNvbnRhY3QgYSBHYWxheHkgYWRtaT0KbmlzdHJhdG9y IGlmIHRoZSBwcm9ibGVtIHBlcnNpc3RzIikrIi4ifSxkaXNwbGF5TWVzc2FnZTpmdW5jdGlvbih3 LHgsdil7dmFyPQogdD0zRHRoaXM7dGhpcy5zY3JvbGxUb1RvcCgpO3ZhciB1PTNEdGhpcy4kbWVz c2FnZXMoKSxyPTNEJCgiPGRpdi8+IikuYWRkQ2w9CmFzcyh3KyJtZXNzYWdlIikuaHRtbCh4KTtp ZighXy5pc0VtcHR5KHYpKXt2YXIgcz0zRCQoJzxhIGhyZWY9M0QiamF2YXNjcmlwdD0KOnZvaWQo MCkiPkRldGFpbHM8L2E+JykuY2xpY2soZnVuY3Rpb24oKXtHYWxheHkubW9kYWwuc2hvdyh0Ll9t ZXNzYWdlVG9Nb2RhPQpsT3B0aW9ucyh3LHgsdikpO3JldHVybiBmYWxzZX0pO3IuYXBwZW5kKCIg IixzKX1yZXR1cm4gdS5odG1sKHIpfSxfbWVzc2FnZVQ9Cm9Nb2RhbE9wdGlvbnM6ZnVuY3Rpb24o dSx4LHQpe3ZhciByPTNEdGhpcyxzPTNEe3RpdGxlOiJEZXRhaWxzIn07aWYoXy5pc09iaj0KZWN0 KHQpKXt0PTNEXy5vbWl0KHQsXy5mdW5jdGlvbnModCkpO3ZhciB3PTNESlNPTi5zdHJpbmdpZnko dCxudWxsLCIgICIpLHY9Cj0zRCQoIjxwcmUvPiIpLnRleHQodyk7cy5ib2R5PTNEJCgiPGRpdi8+ IikuYXBwZW5kKHYpfWVsc2V7cy5ib2R5PTNEJCgiPGRpdj0KLz4iKS5odG1sKHQpfXMuYnV0dG9u cz0zRHtPazpmdW5jdGlvbigpe0dhbGF4eS5tb2RhbC5oaWRlKCk7ci5jbGVhck1lc3NhZ2VzPQoo KX19O3JldHVybiBzfSxjbGVhck1lc3NhZ2VzOmZ1bmN0aW9uKHIpeyQoci5jdXJyZW50VGFyZ2V0 KS5mYWRlT3V0KHRoaXMuZng9ClNwZWVkLGZ1bmN0aW9uKCl7JCh0aGlzKS5yZW1vdmUoKX0pO3Jl dHVybiB0aGlzfSxzY3JvbGxUb0hpZDpmdW5jdGlvbihyKXtyZT0KdHVybiB0aGlzLnNjcm9sbFRv SXRlbShfLmZpcnN0KHRoaXMudmlld3NXaGVyZU1vZGVsKHtoaWQ6cn0pKSl9LHRvU3RyaW5nOmZ1 PQpuY3Rpb24oKXtyZXR1cm4iSGlzdG9yeVBhbmVsKCIrKCh0aGlzLm1vZGVsKT8odGhpcy5tb2Rl bC5nZXQoIm5hbWUiKSk6KCIiKSk9CisiKSJ9fSk7bS5wcm90b3R5cGUudGVtcGxhdGVzPTNEKGZ1 bmN0aW9uKCl7dmFyIHI9M0RxLndyYXBUZW1wbGF0ZShbJzxkaXYgYz0KbGFzcz0zRCJjb250cm9s cyI+JywnPGRpdiBjbGFzcz0zRCJ0aXRsZSI+JywnPGRpdiBjbGFzcz0zRCJuYW1lIj48JT0zRCBo aXN0PQpvcnkubmFtZSAlPjwvZGl2PicsIjwvZGl2PiIsJzxkaXYgY2xhc3M9M0Qic3VidGl0bGUi PjwvZGl2PicsJzxkaXYgY2xhc3M9M0Q9CiJoaXN0b3J5LXNpemUiPjwlPTNEIGhpc3Rvcnkubmlj ZV9zaXplICU+PC9kaXY+JywnPGRpdiBjbGFzcz0zRCJhY3Rpb25zIj48Lz0KZGl2PicsJzxkaXYg Y2xhc3M9M0QibWVzc2FnZXMiPicsIjwlIGlmKCBoaXN0b3J5LmRlbGV0ZWQgJiYgaGlzdG9yeS5w dXJnZWQgPQopeyAlPiIsJzxkaXYgY2xhc3M9M0QiZGVsZXRlZC1tc2cgd2FybmluZ21lc3NhZ2Vz bWFsbCI+JyxnKCJUaGlzIGhpc3RvcnkgaGE9CnMgYmVlbiBwdXJnZWQgYW5kIGRlbGV0ZWQiKSwi PC9kaXY+IiwiPCUgfSBlbHNlIGlmKCBoaXN0b3J5LmRlbGV0ZWQgKXsgJT4iLD0KJzxkaXYgY2xh c3M9M0QiZGVsZXRlZC1tc2cgd2FybmluZ21lc3NhZ2VzbWFsbCI+JyxnKCJUaGlzIGhpc3Rvcnkg aGFzIGJlZW4gPQpkZWxldGVkIiksIjwvZGl2PiIsIjwlIH0gZWxzZSBpZiggaGlzdG9yeS5wdXJn ZWQgKXsgJT4iLCc8ZGl2IGNsYXNzPTNEImRlbGU9CnRlZC1tc2cgd2FybmluZ21lc3NhZ2VzbWFs bCI+JyxnKCJUaGlzIGhpc3RvcnkgaGFzIGJlZW4gcHVyZ2VkIiksIjwvZGl2PiIsIj0KPCUgfSAl PiIsIjwlIGlmKCBoaXN0b3J5Lm1lc3NhZ2UgKXsgJT4iLCc8ZGl2IGNsYXNzPTNEIjwlPTNEIGhp c3RvcnkubWVzc2FnPQplLmxldmVsIHx8ICJpbmZvIiAlPm1lc3NhZ2VzbWFsbCI+JywiPCU9M0Qg aGlzdG9yeS5tZXNzYWdlLnRleHQgJT4iLCI8L2Rpdj49CiIsIjwlIH0gJT4iLCI8L2Rpdj4iLCc8 ZGl2IGNsYXNzPTNEInRhZ3MtZGlzcGxheSI+PC9kaXY+JywnPGRpdiBjbGFzcz0zRCJhbj0Kbm90 YXRpb24tZGlzcGxheSI+PC9kaXY+JywnPGRpdiBjbGFzcz0zRCJzZWFyY2giPicsJzxkaXYgY2xh c3M9M0Qic2VhcmNoLWluPQpwdXQiPjwvZGl2PicsIjwvZGl2PiIsJzxkaXYgY2xhc3M9M0QibGlz dC1hY3Rpb25zIj4nLCc8ZGl2IGNsYXNzPTNEImJ0bi1ncm89CnVwIj4nLCc8YnV0dG9uIGNsYXNz PTNEInNlbGVjdC1hbGwgYnRuIGJ0bi1kZWZhdWx0IicsJ2RhdGEtbW9kZT0zRCJzZWxlY3QiPj0K JyxnKCJBbGwiKSwiPC9idXR0b24+IiwnPGJ1dHRvbiBjbGFzcz0zRCJkZXNlbGVjdC1hbGwgYnRu IGJ0bi1kZWZhdWx0IicsJ2RhPQp0YS1tb2RlPTNEInNlbGVjdCI+JyxnKCJOb25lIiksIjwvYnV0 dG9uPiIsIjwvZGl2PiIsJzxkaXYgY2xhc3M9M0QibGlzdC1hY3Q9Cmlvbi1tZW51IGJ0bi1ncm91 cCI+JywiPC9kaXY+IiwiPC9kaXY+IiwiPC9kaXY+Il0sImhpc3RvcnkiKTtyZXR1cm4gXy5leHRl bj0KZChfLmNsb25lKHAucHJvdG90eXBlLnRlbXBsYXRlcykse2NvbnRyb2xzOnJ9KX0oKSk7cmV0 dXJue0hpc3RvcnlQYW5lbDptfX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RlZmlu ZShbIm12Yy9saXN0L2xpc3QtcGFuZWwiLCJtdmMvaGlzdG9yeS9oaXN0b3J5LW1vZGVsIiwibXZj L2hpc3RvcnkvaGlzPQp0b3J5LWNvbnRlbnRzIiwibXZjL2hpc3RvcnkvaGRhLWxpIiwibXZjL2hp c3RvcnkvaGRjYS1saSIsIm12Yy9jb2xsZWN0aW9uL2M9Cm9sbGVjdGlvbi1wYW5lbCIsIm12Yy91 c2VyL3VzZXItbW9kZWwiLCJ1aS9mYS1pY29uLWJ1dHRvbiIsIm12Yy91aS9wb3B1cC1tZT0KbnUi LCJtdmMvYmFzZS1tdmMiLCJ1dGlscy9sb2NhbGl6YXRpb24iLCJ1aS9zZWFyY2gtaW5wdXQiXSxm dW5jdGlvbihmLGgsbixkPQosYixvLGksYyxhLHEsZyl7dmFyIGw9M0RxLlNlc3Npb25TdG9yYWdl TW9kZWwuZXh0ZW5kKHtkZWZhdWx0czp7ZXhwYW5kZWRJZHM9Cjp7fSxzaG93X2RlbGV0ZWQ6ZmFs c2Usc2hvd19oaWRkZW46ZmFsc2V9LGFkZEV4cGFuZGVkOmZ1bmN0aW9uKHIpe3ZhciBzPTNEIj0K ZXhwYW5kZWRJZHMiO3RoaXMuc2F2ZShzLF8uZXh0ZW5kKHRoaXMuZ2V0KHMpLF8ub2JqZWN0KFty LmlkXSxbci5nZXQoImlkIildPQopKSl9LHJlbW92ZUV4cGFuZGVkOmZ1bmN0aW9uKHIpe3ZhciBz PTNEImV4cGFuZGVkSWRzIjt0aGlzLnNhdmUocyxfLm9taXQodGg9CmlzLmdldChzKSxyLmlkKSl9 LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIkhpc3RvcnlQcmVmcygiK3RoaXMuaWQrIikifX0p Oz0KbC5zdG9yYWdlS2V5UHJlZml4PTNEImhpc3Rvcnk6IjtsLmhpc3RvcnlTdG9yYWdlS2V5PTNE ZnVuY3Rpb24gaihyKXtpZighcil7PQp0aHJvdyBuZXcgRXJyb3IoIkhpc3RvcnlQcmVmcy5oaXN0 b3J5U3RvcmFnZUtleSBuZWVkcyB2YWxpZCBpZDogIityKX1yZXR1cm49CihsLnN0b3JhZ2VLZXlQ cmVmaXgrcil9O2wuZ2V0PTNEZnVuY3Rpb24gZShyKXtyZXR1cm4gbmV3IGwoe2lkOmwuaGlzdG9y eVN0bz0KcmFnZUtleShyKX0pfTtsLmNsZWFyQWxsPTNEZnVuY3Rpb24gayhzKXtmb3IodmFyIHIg aW4gc2Vzc2lvblN0b3JhZ2Upe2lmKHIuPQppbmRleE9mKGwuc3RvcmFnZUtleVByZWZpeCk9M0Q9 M0Q9M0QwKXtzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHIpfX19O3ZhciA9CnA9M0RmLk1vZGVs TGlzdFBhbmVsO3ZhciBtPTNEcC5leHRlbmQoe0hEQVZpZXdDbGFzczpkLkhEQUxpc3RJdGVtVmll dyxIRENBVj0KaWV3Q2xhc3M6Yi5IRENBTGlzdEl0ZW1WaWV3LGNvbGxlY3Rpb25DbGFzczpuLkhp c3RvcnlDb250ZW50cyxtb2RlbENvbGxlY3RpPQpvbktleToiY29udGVudHMiLHRhZ05hbWU6ImRp diIsY2xhc3NOYW1lOnAucHJvdG90eXBlLmNsYXNzTmFtZSsiIGhpc3RvcnktcGE9Cm5lbCIsZW1w dHlNc2c6ZygiVGhpcyBoaXN0b3J5IGlzIGVtcHR5Iiksbm9uZUZvdW5kTXNnOmcoIk5vIG1hdGNo aW5nIGRhdGFzZT0KdHMgZm91bmQiKSxzZWFyY2hQbGFjZWhvbGRlcjpnKCJzZWFyY2ggZGF0YXNl dHMiKSxpbml0aWFsaXplOmZ1bmN0aW9uKHIpe3AuPQpwcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxs KHRoaXMscik7dGhpcy5saW5rVGFyZ2V0PTNEci5saW5rVGFyZ2V0fHwiX2JsYW5rIn09CixmcmVl TW9kZWw6ZnVuY3Rpb24oKXtwLnByb3RvdHlwZS5mcmVlTW9kZWwuY2FsbCh0aGlzKTtpZih0aGlz Lm1vZGVsKXt0aGlzLj0KbW9kZWwuY2xlYXJVcGRhdGVUaW1lb3V0KCl9cmV0dXJuIHRoaXN9LF9z ZXRVcExpc3RlbmVyczpmdW5jdGlvbigpe3AucHJvdG90PQp5cGUuX3NldFVwTGlzdGVuZXJzLmNh bGwodGhpcyk7dGhpcy5vbigiZXJyb3IiLGZ1bmN0aW9uKHMsdixyLHUsdCl7dGhpcy5lcnI9Cm9y SGFuZGxlcihzLHYscix1LHQpfSk7dGhpcy5vbigibG9hZGluZy1kb25lIixmdW5jdGlvbigpe2lm KCF0aGlzLnZpZXdzLmxlbj0KZ3RoKXt0aGlzLnRyaWdnZXIoImVtcHR5LWhpc3RvcnkiLHRoaXMp fX0pfSxsb2FkSGlzdG9yeVdpdGhEZXRhaWxzOmZ1bmN0aW9uPQoodSx0LHMsdil7dGhpcy5pbmZv KCJsb2FkSGlzdG9yeVdpdGhEZXRhaWxzOiIsdSx0LHMsdik7dmFyIHI9M0RmdW5jdGlvbih3KXs9 CnJldHVybiBfLnZhbHVlcyhsLmdldCh3LmlkKS5nZXQoImV4cGFuZGVkSWRzIikpfTtyZXR1cm4g dGhpcy5sb2FkSGlzdG9yeSh1LD0KdCxzLHYscil9LGxvYWRIaXN0b3J5OmZ1bmN0aW9uKHYsdSx0 LHcscil7dGhpcy5pbmZvKCJsb2FkSGlzdG9yeToiLHYsdSx0LHcsPQpyKTt2YXIgcz0zRHRoaXM7 dT0zRHV8fHt9O3MudHJpZ2dlcigibG9hZGluZyIscyk7dmFyIHg9M0RoLkhpc3RvcnkuZ2V0SGlz dG89CnJ5RGF0YSh2LHtoaXN0b3J5Rm46dCxjb250ZW50c0ZuOncsZGV0YWlsSWRzRm46dS5pbml0 aWFsbHlFeHBhbmRlZHx8cn0pO3JldD0KdXJuIHMuX2xvYWRIaXN0b3J5RnJvbVhIUih4LHUpLmZh aWwoZnVuY3Rpb24oQSx5LHope3MudHJpZ2dlcigiZXJyb3IiLHMsQSx1PQosZygiQW4gZXJyb3Ig d2FzIGVuY291bnRlcmVkIHdoaWxlICIreSkse2hpc3RvcnlJZDp2LGhpc3Rvcnk6enx8e319KX0p LmFsd2E9CnlzKGZ1bmN0aW9uKCl7cy50cmlnZ2VyKCJsb2FkaW5nLWRvbmUiLHMpfSl9LF9sb2Fk SGlzdG9yeUZyb21YSFI6ZnVuY3Rpb24odD0KLHMpe3ZhciByPTNEdGhpczt0LnRoZW4oZnVuY3Rp b24odSx2KXtyLkpTT05Ub01vZGVsKHUsdixzKTtyLnJlbmRlcigpfSk7dC5mPQphaWwoZnVuY3Rp b24odix1KXtyLnJlbmRlcigpfSk7cmV0dXJuIHR9LHJlZnJlc2hDb250ZW50czpmdW5jdGlvbihz LHIpe2lmKHQ9Cmhpcy5tb2RlbCl7cmV0dXJuIHRoaXMubW9kZWwucmVmcmVzaChzLHIpfXJldHVy biAkLndoZW4oKX0sSlNPTlRvTW9kZWw6ZnVuYz0KdGlvbih1LHIscyl7dGhpcy5sb2coIkpTT05U b01vZGVsOiIsdSxyLHMpO3M9M0RzfHx7fTt2YXIgdD0zRG5ldyBoLkhpc3RvcnkoPQp1LHIscyk7 dGhpcy5zZXRNb2RlbCh0KTtyZXR1cm4gdH0sc2V0TW9kZWw6ZnVuY3Rpb24ocyxyKXtyPTNEcnx8 e307cC5wcm90b3Q9CnlwZS5zZXRNb2RlbC5jYWxsKHRoaXMscyxyKTtpZih0aGlzLm1vZGVsKXt0 aGlzLl9zZXRVcFdlYlN0b3JhZ2Uoci5pbml0aWFsbD0KeUV4cGFuZGVkLHIuc2hvd19kZWxldGVk LHIuc2hvd19oaWRkZW4pfX0sX3NldFVwV2ViU3RvcmFnZTpmdW5jdGlvbihzLHIsdCl7PQppZih0 aGlzLnN0b3JhZ2Upe3RoaXMuc3RvcExpc3RlbmluZyh0aGlzLnN0b3JhZ2UpfXRoaXMuc3RvcmFn ZT0zRG5ldyBsKHtpZDo9CmwuaGlzdG9yeVN0b3JhZ2VLZXkodGhpcy5tb2RlbC5nZXQoImlkIikp fSk7aWYoXy5pc09iamVjdChzKSl7dGhpcy5zdG9yYWdlLj0Kc2V0KCJleHBhbmRlZElkcyIscyl9 aWYoXy5pc0Jvb2xlYW4ocikpe3RoaXMuc3RvcmFnZS5zZXQoInNob3dfZGVsZXRlZCIscil9PQpp ZihfLmlzQm9vbGVhbih0KSl7dGhpcy5zdG9yYWdlLnNldCgic2hvd19oaWRkZW4iLHQpfXRoaXMu dHJpZ2dlcigibmV3LXN0b3I9CmFnZSIsdGhpcy5zdG9yYWdlLHRoaXMpO3RoaXMubG9nKHRoaXMr IiAoaW5pdCdkKSBzdG9yYWdlOiIsdGhpcy5zdG9yYWdlLmdldD0KKCkpO3RoaXMubGlzdGVuVG8o dGhpcy5zdG9yYWdlLHsiY2hhbmdlOnNob3dfZGVsZXRlZCI6ZnVuY3Rpb24odSx2KXt0aGlzLnNo PQpvd0RlbGV0ZWQ9M0R2fSwiY2hhbmdlOnNob3dfaGlkZGVuIjpmdW5jdGlvbih1LHYpe3RoaXMu c2hvd0hpZGRlbj0zRHZ9fSx0aGk9CnMpO3RoaXMuc2hvd0RlbGV0ZWQ9M0QociE9M0Q9M0R1bmRl ZmluZWQpP3I6dGhpcy5zdG9yYWdlLmdldCgic2hvd19kZWxldGVkIj0KKTt0aGlzLnNob3dIaWRk ZW49M0QodCE9M0Q9M0R1bmRlZmluZWQpP3Q6dGhpcy5zdG9yYWdlLmdldCgic2hvd19oaWRkZW4i KTtyPQpldHVybiB0aGlzfSxfYnVpbGROZXdSZW5kZXI6ZnVuY3Rpb24oKXt2YXIgcj0zRHAucHJv dG90eXBlLl9idWlsZE5ld1JlbmRlci49CmNhbGwodGhpcyk7aWYodGhpcy5tdWx0aXNlbGVjdEFj dGlvbnMoKS5sZW5ndGgpe3IuZmluZCgiLmNvbnRyb2xzIC5hY3Rpb25zIj0KKS5wcmVwZW5kKHRo aXMuX3JlbmRlclNlbGVjdEJ1dHRvbigpKX1yZXR1cm4gcn0sX3JlbmRlclNlbGVjdEJ1dHRvbjpm dW5jdGlvPQpuKHIpe3JldHVybiBjKHt0aXRsZTpnKCJPcGVyYXRpb25zIG9uIG11bHRpcGxlIGRh dGFzZXRzIiksY2xhc3Nlczoic2hvdy1zZWw9CmVjdG9ycy1idG4iLGZhSWNvbjoiZmEtY2hlY2st c3F1YXJlLW8ifSl9LF9nZXRJdGVtVmlld0NsYXNzOmZ1bmN0aW9uKHIpe3Zhcj0KIHM9M0RyLmdl dCgiaGlzdG9yeV9jb250ZW50X3R5cGUiKTtzd2l0Y2gocyl7Y2FzZSJkYXRhc2V0IjpyZXR1cm4g dGhpcy5IREFWPQppZXdDbGFzcztjYXNlImRhdGFzZXRfY29sbGVjdGlvbiI6cmV0dXJuIHRoaXMu SERDQVZpZXdDbGFzc310aHJvdyBuZXcgVHlwZUU9CnJyb3IoIlVua25vd24gaGlzdG9yeV9jb250 ZW50X3R5cGU6ICIrcyl9LF9maWx0ZXJJdGVtOmZ1bmN0aW9uKHMpe3ZhciByPTNEdD0KaGlzO3Jl dHVybihwLnByb3RvdHlwZS5fZmlsdGVySXRlbS5jYWxsKHIscykmJighcy5oaWRkZW4oKXx8ci5z aG93SGlkZGVuKSYmPQooIXMuaXNEZWxldGVkT3JQdXJnZWQoKXx8ci5zaG93RGVsZXRlZCkpfSxf Z2V0SXRlbVZpZXdPcHRpb25zOmZ1bmN0aW9uKHMpe3Y9CmFyIHI9M0RwLnByb3RvdHlwZS5fZ2V0 SXRlbVZpZXdPcHRpb25zLmNhbGwodGhpcyxzKTtyZXR1cm4gXy5leHRlbmQocix7bGluaz0KVGFy Z2V0OnRoaXMubGlua1RhcmdldCxleHBhbmRlZDohIXRoaXMuc3RvcmFnZS5nZXQoImV4cGFuZGVk SWRzIilbcy5pZF0saGFzPQpVc2VyOnRoaXMubW9kZWwub3duZWRCeUN1cnJVc2VyKCl9KX0sX3Nl dFVwSXRlbVZpZXdMaXN0ZW5lcnM6ZnVuY3Rpb24ocyl7dmE9CnIgcj0zRHRoaXM7cC5wcm90b3R5 cGUuX3NldFVwSXRlbVZpZXdMaXN0ZW5lcnMuY2FsbChyLHMpO3Mub24oImV4cGFuZGVkIixmdT0K bmN0aW9uKHQpe3Iuc3RvcmFnZS5hZGRFeHBhbmRlZCh0Lm1vZGVsKX0pO3Mub24oImNvbGxhcHNl ZCIsZnVuY3Rpb24odCl7ci5zPQp0b3JhZ2UucmVtb3ZlRXhwYW5kZWQodC5tb2RlbCl9KTtyZXR1 cm4gdGhpc30sZ2V0U2VsZWN0ZWRNb2RlbHM6ZnVuY3Rpb24oKXs9CnZhciByPTNEcC5wcm90b3R5 cGUuZ2V0U2VsZWN0ZWRNb2RlbHMuY2FsbCh0aGlzKTtyLmhpc3RvcnlJZD0zRHRoaXMuY29sbGVj dD0KaW9uLmhpc3RvcnlJZDtyZXR1cm4gcn0sZXZlbnRzOl8uZXh0ZW5kKF8uY2xvbmUocC5wcm90 b3R5cGUuZXZlbnRzKSx7ImNsaWNrPQogLnNob3ctc2VsZWN0b3JzLWJ0biI6InRvZ2dsZVNlbGVj dG9ycyIsImNsaWNrIC5tZXNzYWdlcyBbY2xhc3MkPTNEbWVzc2FnZV09CiI6ImNsZWFyTWVzc2Fn ZXMifSksdG9nZ2xlU2hvd0RlbGV0ZWQ6ZnVuY3Rpb24ocixzKXtyPTNEKHIhPTNEPTNEdW5kZWZp bmVkKT0KPyhyKTooIXRoaXMuc2hvd0RlbGV0ZWQpO3M9M0QocyE9M0Q9M0R1bmRlZmluZWQpPyhz KToodHJ1ZSk7dGhpcy5zaG93RGVsZXRlPQpkPTNEcjtpZihzKXt0aGlzLnN0b3JhZ2Uuc2V0KCJz aG93X2RlbGV0ZWQiLHIpfXRoaXMudHJpZ2dlcigic2hvdy1oaWRkZW4iLHI9Cik7dGhpcy5yZW5k ZXJJdGVtcygpO3JldHVybiB0aGlzLnNob3dEZWxldGVkfSx0b2dnbGVTaG93SGlkZGVuOmZ1bmN0 aW9uKHIscz0KKXtyPTNEKHIhPTNEPTNEdW5kZWZpbmVkKT8ocik6KCF0aGlzLnNob3dIaWRkZW4p O3M9M0QocyE9M0Q9M0R1bmRlZmluZWQpPyhzPQopOih0cnVlKTt0aGlzLnNob3dIaWRkZW49M0Ry O2lmKHMpe3RoaXMuc3RvcmFnZS5zZXQoInNob3dfaGlkZGVuIixyKX10aGlzLnQ9CnJpZ2dlcigi c2hvdy1oaWRkZW4iLHIpO3RoaXMucmVuZGVySXRlbXMoKTtyZXR1cm4gdGhpcy5zaG93SGlkZGVu fSxfZmlyc3RTZT0KYXJjaDpmdW5jdGlvbihyKXt2YXIgcz0zRHRoaXMsdD0zRCIuaGlzdG9yeS1z ZWFyY2gtaW5wdXQiO3RoaXMubG9nKCJvbkZpcnN0PQpTZWFyY2giLHIpO2lmKHMubW9kZWwuY29u dGVudHMuaGF2ZURldGFpbHMoKSl7cy5zZWFyY2hJdGVtcyhyKTtyZXR1cm59cy4kZWw9Ci5maW5k KHQpLnNlYXJjaElucHV0KCJ0b2dnbGUtbG9hZGluZyIpO3MubW9kZWwuY29udGVudHMuZmV0Y2hB bGxEZXRhaWxzKHtzaT0KbGVudDp0cnVlfSkuYWx3YXlzKGZ1bmN0aW9uKCl7cy4kZWwuZmluZCh0 KS5zZWFyY2hJbnB1dCgidG9nZ2xlLWxvYWRpbmciKX0pPQouZG9uZShmdW5jdGlvbigpe3Muc2Vh cmNoSXRlbXMocil9KX0sZXJyb3JIYW5kbGVyOmZ1bmN0aW9uKHQsdyxzLHYsdSl7dGhpcy49CmVy cm9yKHQsdyxzLHYsdSk7aWYodyYmdy5zdGF0dXM9M0Q9M0Q9M0QwJiZ3LnJlYWR5U3RhdGU9M0Q9 M0Q9M0QwKXt9ZWxzZXtpZj0KKHcmJncuc3RhdHVzPTNEPTNEPTNENTAyKXt9ZWxzZXt2YXIgcj0z RHRoaXMuX3BhcnNlRXJyb3JNZXNzYWdlKHQsdyxzLHYsdSk7PQppZighdGhpcy4kbWVzc2FnZXMo KS5pcygiOnZpc2libGUiKSl7dGhpcy5vbmNlKCJyZW5kZXJlZCIsZnVuY3Rpb24oKXt0aGlzLmQ9 CmlzcGxheU1lc3NhZ2UoImVycm9yIixyLm1lc3NhZ2Usci5kZXRhaWxzKX0pfWVsc2V7dGhpcy5k aXNwbGF5TWVzc2FnZSgiZXJybz0KciIsci5tZXNzYWdlLHIuZGV0YWlscyl9fX19LF9wYXJzZUVy cm9yTWVzc2FnZTpmdW5jdGlvbih2LHkseix0LHIsdyl7dmFyIHU9Cj0zREdhbGF4eS5jdXJyVXNl cix4PTNEe21lc3NhZ2U6dGhpcy5fYmVQb2xpdGUodCksZGV0YWlsczp7bWVzc2FnZTp0LHJhdmVu Oj0KKHdpbmRvdy5SYXZlbiYmXy5pc0Z1bmN0aW9uKFJhdmVuLmxhc3RFdmVudElkKSk/KFJhdmVu Lmxhc3RFdmVudElkKCkpOih1bmRlPQpmaW5lZCksYWdlbnQ6bmF2aWdhdG9yLnVzZXJBZ2VudCx1 cmw6KHdpbmRvdy5HYWxheHkpPyhHYWxheHkubGFzdEFqYXgudXJsKTo9Cih1bmRlZmluZWQpLGRh dGE6KHdpbmRvdy5HYWxheHkpPyhHYWxheHkubGFzdEFqYXguZGF0YSk6KHVuZGVmaW5lZCksb3B0 aW9ucz0KOih5KT8oXy5vbWl0KHosInhociIpKTooeikseGhyOnksc291cmNlOihfLmlzRnVuY3Rp b24odi50b0pTT04pKT8odi50b0pTT04oPQopKToodisiIiksdXNlcjoodSBpbnN0YW5jZW9mIGku VXNlcik/KHUudG9KU09OKCkpOih1KyIiKX19O18uZXh0ZW5kKHguZGV0YWk9CmxzLHJ8fHt9KTtp Zih5JiZfLmlzRnVuY3Rpb24oeS5nZXRBbGxSZXNwb25zZUhlYWRlcnMpKXt2YXIgcz0zRHkuZ2V0 QWxsUmVzcD0Kb25zZUhlYWRlcnMoKTtzPTNEXy5jb21wYWN0KHMuc3BsaXQoIlxuIikpO3M9M0Rf Lm1hcChzLGZ1bmN0aW9uKEEpe3JldHVybiBBPQouc3BsaXQoIjogIil9KTt4LmRldGFpbHMueGhy LnJlc3BvbnNlSGVhZGVycz0zRF8ub2JqZWN0KHMpfXJldHVybiB4fSxfYmVQb2w9Cml0ZTpmdW5j dGlvbihyKXtyPTNEcnx8ZygiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZ2V0dGluZyB1cGRhdGVz IGZyb20gdGhlID0Kc2VydmVyIik7cmV0dXJuIHIrIi4gIitnKCJQbGVhc2UgY29udGFjdCBhIEdh bGF4eSBhZG1pbmlzdHJhdG9yIGlmIHRoZSBwcm9iPQpsZW0gcGVyc2lzdHMiKSsiLiJ9LGRpc3Bs YXlNZXNzYWdlOmZ1bmN0aW9uKHcseCx2KXt2YXIgdD0zRHRoaXM7dGhpcy5zY3JvbGw9ClRvVG9w KCk7dmFyIHU9M0R0aGlzLiRtZXNzYWdlcygpLHI9M0QkKCI8ZGl2Lz4iKS5hZGRDbGFzcyh3KyJt ZXNzYWdlIikuaHRtbD0KKHgpO2lmKCFfLmlzRW1wdHkodikpe3ZhciBzPTNEJCgnPGEgaHJlZj0z RCJqYXZhc2NyaXB0OnZvaWQoMCkiPkRldGFpbHM8L2E+PQonKS5jbGljayhmdW5jdGlvbigpe0dh bGF4eS5tb2RhbC5zaG93KHQuX21lc3NhZ2VUb01vZGFsT3B0aW9ucyh3LHgsdikpO3JldHU9CnJu IGZhbHNlfSk7ci5hcHBlbmQoIiAiLHMpfXJldHVybiB1LmFwcGVuZChyKX0sX21lc3NhZ2VUb01v ZGFsT3B0aW9uczpmdW5jdD0KaW9uKHUseCx0KXt2YXIgcj0zRHRoaXMscz0zRHt0aXRsZToiRGV0 YWlscyJ9O2lmKF8uaXNPYmplY3QodCkpe3Q9M0RfLm9taXQoPQp0LF8uZnVuY3Rpb25zKHQpKTt2 YXIgdz0zREpTT04uc3RyaW5naWZ5KHQsbnVsbCwiICAiKSx2PTNEJCgiPHByZS8+IikudGV4dCg9 CncpO3MuYm9keT0zRCQoIjxkaXYvPiIpLmFwcGVuZCh2KX1lbHNle3MuYm9keT0zRCQoIjxkaXYv PiIpLmh0bWwodCl9cy5idXR0bz0KbnM9M0R7T2s6ZnVuY3Rpb24oKXtHYWxheHkubW9kYWwuaGlk ZSgpO3IuY2xlYXJNZXNzYWdlcygpfX07cmV0dXJuIHN9LGNsZWFyPQpNZXNzYWdlczpmdW5jdGlv bihzKXt2YXIgcj0zRCFfLmlzVW5kZWZpbmVkKHMpPyQocy5jdXJyZW50VGFyZ2V0KTp0aGlzLiRt ZXM9CnNhZ2VzKCkuY2hpbGRyZW4oJ1tjbGFzcyQ9M0QibWVzc2FnZSJdJyk7ci5mYWRlT3V0KHRo aXMuZnhTcGVlZCxmdW5jdGlvbigpez0KJCh0aGlzKS5yZW1vdmUoKX0pO3JldHVybiB0aGlzfSxz Y3JvbGxUb0hpZDpmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY3JvbGxUPQpvSXRlbShfLmZpcnN0 KHRoaXMudmlld3NXaGVyZU1vZGVsKHtoaWQ6cn0pKSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0 dXJuIkg9CmlzdG9yeVBhbmVsKCIrKCh0aGlzLm1vZGVsKT8odGhpcy5tb2RlbC5nZXQoIm5hbWUi KSk6KCIiKSkrIikifX0pO20ucHJvdG90eT0KcGUudGVtcGxhdGVzPTNEKGZ1bmN0aW9uKCl7dmFy IHI9M0RxLndyYXBUZW1wbGF0ZShbJzxkaXYgY2xhc3M9M0QiY29udHJvbHMiPQo+JywnPGRpdiBj bGFzcz0zRCJ0aXRsZSI+JywnPGRpdiBjbGFzcz0zRCJuYW1lIj48JT0zRCBoaXN0b3J5Lm5hbWUg JT48L2Rpdj49CicsIjwvZGl2PiIsJzxkaXYgY2xhc3M9M0Qic3VidGl0bGUiPjwvZGl2PicsJzxk aXYgY2xhc3M9M0QiaGlzdG9yeS1zaXplIj48JT0KPTNEIGhpc3RvcnkubmljZV9zaXplICU+PC9k aXY+JywnPGRpdiBjbGFzcz0zRCJhY3Rpb25zIj48L2Rpdj4nLCc8ZGl2IGNsYXNzPQo9M0QibWVz c2FnZXMiPicsIjwlIGlmKCBoaXN0b3J5LmRlbGV0ZWQgJiYgaGlzdG9yeS5wdXJnZWQgKXsgJT4i LCc8ZGl2IGNsYXM9CnM9M0QiZGVsZXRlZC1tc2cgd2FybmluZ21lc3NhZ2VzbWFsbCI+JyxnKCJU aGlzIGhpc3RvcnkgaGFzIGJlZW4gcHVyZ2VkIGFuZD0KIGRlbGV0ZWQiKSwiPC9kaXY+IiwiPCUg fSBlbHNlIGlmKCBoaXN0b3J5LmRlbGV0ZWQgKXsgJT4iLCc8ZGl2IGNsYXNzPTNEImRlPQpsZXRl ZC1tc2cgd2FybmluZ21lc3NhZ2VzbWFsbCI+JyxnKCJUaGlzIGhpc3RvcnkgaGFzIGJlZW4gZGVs ZXRlZCIpLCI8L2Rpdj49CiIsIjwlIH0gZWxzZSBpZiggaGlzdG9yeS5wdXJnZWQgKXsgJT4iLCc8 ZGl2IGNsYXNzPTNEImRlbGV0ZWQtbXNnIHdhcm5pbmdtZT0Kc3NhZ2VzbWFsbCI+JyxnKCJUaGlz IGhpc3RvcnkgaGFzIGJlZW4gcHVyZ2VkIiksIjwvZGl2PiIsIjwlIH0gJT4iLCI8JSBpZiggPQpo aXN0b3J5Lm1lc3NhZ2UgKXsgJT4iLCc8ZGl2IGNsYXNzPTNEIjwlPTNEIGhpc3RvcnkubWVzc2Fn ZS5sZXZlbCB8fCAiaW5mbyI9CiAlPm1lc3NhZ2VzbWFsbCI+JywiPCU9M0QgaGlzdG9yeS5tZXNz YWdlLnRleHQgJT4iLCI8L2Rpdj4iLCI8JSB9ICU+IiwiPC9kaT0Kdj4iLCc8ZGl2IGNsYXNzPTNE InRhZ3MtZGlzcGxheSI+PC9kaXY+JywnPGRpdiBjbGFzcz0zRCJhbm5vdGF0aW9uLWRpc3BsYXki PQo+PC9kaXY+JywnPGRpdiBjbGFzcz0zRCJzZWFyY2giPicsJzxkaXYgY2xhc3M9M0Qic2VhcmNo LWlucHV0Ij48L2Rpdj4nLCI8L2Q9Cml2PiIsJzxkaXYgY2xhc3M9M0QibGlzdC1hY3Rpb25zIj4n LCc8ZGl2IGNsYXNzPTNEImJ0bi1ncm91cCI+JywnPGJ1dHRvbiBjbD0KYXNzPTNEInNlbGVjdC1h bGwgYnRuIGJ0bi1kZWZhdWx0IicsJ2RhdGEtbW9kZT0zRCJzZWxlY3QiPicsZygiQWxsIiksIjwv YnV0PQp0b24+IiwnPGJ1dHRvbiBjbGFzcz0zRCJkZXNlbGVjdC1hbGwgYnRuIGJ0bi1kZWZhdWx0 IicsJ2RhdGEtbW9kZT0zRCJzZWxlY3Q9CiI+JyxnKCJOb25lIiksIjwvYnV0dG9uPiIsIjwvZGl2 PiIsJzxkaXYgY2xhc3M9M0QibGlzdC1hY3Rpb24tbWVudSBidG4tZ3JvdT0KcCI+JywiPC9kaXY+ IiwiPC9kaXY+IiwiPC9kaXY+Il0sImhpc3RvcnkiKTtyZXR1cm4gXy5leHRlbmQoXy5jbG9uZShw LnByb3RvPQp0eXBlLnRlbXBsYXRlcykse2NvbnRyb2xzOnJ9KX0oKSk7cmV0dXJue0hpc3RvcnlQ YW5lbDptfX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKClJlcG9zaXRvcnkgVVJMOiBo dHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsLwoKLS0KClRoaXMgaXMg YSBjb21taXQgbm90aWZpY2F0aW9uIGZyb20gYml0YnVja2V0Lm9yZy4gWW91IGFyZSByZWNlaXZp bmcKdGhpcyBiZWNhdXNlIHlvdSBoYXZlIHRoZSBzZXJ2aWNlIGVuYWJsZWQsIGFkZHJlc3Npbmcg dGhlIHJlY2lwaWVudCBvZgp0aGlzIGVtYWlsLgo
participants (1)
-
commits-noreply@bitbucket.org