PCFET0NUWVBFIGh0bWw+CjxtZXRhIGNoYXJzZXQ9IndpbmRvd3MtMTI1MiI+Cjx0aXRsZT5EZWZhdWx0IGVuY29kaW5ncyBvZiBYTUwvSlNPTiByZXNvdXJjZXMgd2l0aCBXaW5kb3dzLTEyNTIgcGFnZTwvdGl0bGU+CjxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KPGJvZHk+CjxzY3JpcHQ+Cgphc3luY190ZXN0KHQgPT4gewogIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOwogIGlmcmFtZS5zcmMgPSAncmVzb3VyY2VzL3VuZGVjbGFyZWQtZW5jb2RpbmcueGh0bWwnCiAgaWZyYW1lLm9ubG9hZCA9IHQuc3RlcF9mdW5jX2RvbmUoKCkgPT4gewogICAgY29uc3QgZG9jID0gaWZyYW1lLmNvbnRlbnREb2N1bWVudDsKICAgIGFzc2VydF9lcXVhbHMoZG9jLmNvbnRlbnRUeXBlLCAnYXBwbGljYXRpb24veGh0bWwreG1sJywKICAgICAgICAgICAgICAgICAgJ1Jlc291cmNlIHNob3VsZCBiZSBwYXJzZWQgYXMgWEhUTUwnKTsKICAgIGFzc2VydF9lcXVhbHMoZG9jLmNoYXJhY3RlclNldCwgJ1VURi04JywKICAgICAgICAgICAgICAgICAgJ1Jlc291cmNlIHNob3VsZCB1c2UgZGVmYXVsdCBlbmNvZGluZyBmb3IgWE1MJyk7CiAgfSk7CiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOwogIHQuYWRkX2NsZWFudXAoKCkgPT4gaWZyYW1lLnJlbW92ZSgpKTsKfSwgJ0RlZmF1bHQgZW5jb2Rpbmcgb2YgWE1MIHJlc291cmNlJyk7Cgphc3luY190ZXN0KHQgPT4gewogIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOwogIGlmcmFtZS5zcmMgPSAncmVzb3VyY2VzL3VuZGVjbGFyZWQtZW5jb2RpbmcuanNvbicKICBpZnJhbWUub25sb2FkID0gdC5zdGVwX2Z1bmNfZG9uZSgoKSA9PiB7CiAgICBjb25zdCBkb2MgPSBpZnJhbWUuY29udGVudERvY3VtZW50OwogICAgYXNzZXJ0X2VxdWFscyhkb2MuY29udGVudFR5cGUsICdhcHBsaWNhdGlvbi9qc29uJywKICAgICAgICAgICAgICAgICAgJ1Jlc291cmNlIHNob3VsZCBiZSBwYXJzZWQgYXMgSlNPTicpOwogICAgYXNzZXJ0X2VxdWFscyhkb2MuY2hhcmFjdGVyU2V0LCAnVVRGLTgnLAogICAgICAgICAgICAgICAgICAnUmVzb3VyY2Ugc2hvdWxkIHVzZSBkZWZhdWx0IGVuY29kaW5nIGZvciBKU09OJyk7CgogICAgLy8gRm9yIGdvb2QgbWVhc3VyZSwgcGFyc2UgYXMgSlNPTiBhbmQgdmVyaWZ5IHRoZSBjb250ZW50LgogICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZG9jLmJvZHkuaW5uZXJUZXh0KTsKICAgIGFzc2VydF90cnVlKGRhdGEucGFyc2VkKTsKICAgIC8vIEZpbGUgY29udGFpbnMgIsAiIChVKzAwQzApLCBlbmNvZGVkIGluIFVURi04ICgweEMzIDB4ODApLiBJZgogICAgLy8gbWlzcGFyc2VkIGFzIHdpbmRvd3MtMTI1MiwgdGhpcyB3b3VsZCBiZSAiw4AiLgogICAgYXNzZXJ0X2VxdWFscyhkYXRhLnRleHQsICdcdTAwQzAnKTsKICB9KTsKICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7CiAgdC5hZGRfY2xlYW51cCgoKSA9PiBpZnJhbWUucmVtb3ZlKCkpOwp9LCAnRGVmYXVsdCBlbmNvZGluZyBvZiBKU09OIHJlc291cmNlJyk7Cgo8L3NjcmlwdD4KPC9ib2R5Pgo=