Enter your details below
so we can send your free guide!
CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdnZl9icm93c2VyX3Vua25vd24gZ2Zvcm1fd3JhcHBlciBnZm9ybV9sZWdhY3lfbWFya3VwX3dyYXBwZXIgZ2Zvcm0tdGhlbWUtLW5vLWZyYW1ld29yaycgZGF0YS1mb3JtLXRoZW1lPSdsZWdhY3knIGRhdGEtZm9ybS1pbmRleD0nMCcgaWQ9J2dmb3JtX3dyYXBwZXJfNycgPjxkaXYgaWQ9J2dmXzcnIGNsYXNzPSdnZm9ybV9hbmNob3InIHRhYmluZGV4PSctMSc+PC9kaXY+PGZvcm0gbWV0aG9kPSdwb3N0JyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJyB0YXJnZXQ9J2dmb3JtX2FqYXhfZnJhbWVfNycgaWQ9J2dmb3JtXzcnICBhY3Rpb249Jy90YWcvZWFyLWNvcnJlY3Rpb24vI2dmXzcnIGRhdGEtZm9ybWlkPSc3JyBub3ZhbGlkYXRlPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdnZm9ybS1ib2R5IGdmb3JtX2JvZHknPjx1bCBpZD0nZ2Zvcm1fZmllbGRzXzcnIGNsYXNzPSdnZm9ybV9maWVsZHMgdG9wX2xhYmVsIGZvcm1fc3VibGFiZWxfYmVsb3cgZGVzY3JpcHRpb25fYmVsb3cnPjxsaSBpZD0iZmllbGRfN183IiBjbGFzcz0iZ2ZpZWxkIGdmaWVsZC0tdHlwZS10ZXh0IHp1cmVrLW5hbWUgZ2ZpZWxkX2NvbnRhaW5zX3JlcXVpcmVkIGZpZWxkX3N1YmxhYmVsX2JlbG93IGdmaWVsZC0tbm8tZGVzY3JpcHRpb24gZmllbGRfZGVzY3JpcHRpb25fYmVsb3cgZ2ZpZWxkX3Zpc2liaWxpdHlfdmlzaWJsZSIgIGRhdGEtanMtcmVsb2FkPSJmaWVsZF83XzciID48bGFiZWwgY2xhc3M9J2dmaWVsZF9sYWJlbCBnZm9ybS1maWVsZC1sYWJlbCcgZm9yPSdpbnB1dF83XzcnPk5hbWU8c3BhbiBjbGFzcz0iZ2ZpZWxkX3JlcXVpcmVkIj48c3BhbiBjbGFzcz0iZ2ZpZWxkX3JlcXVpcmVkIGdmaWVsZF9yZXF1aXJlZF9hc3RlcmlzayI+Kjwvc3Bhbj48L3NwYW4+PC9sYWJlbD48ZGl2IGNsYXNzPSdnaW5wdXRfY29udGFpbmVyIGdpbnB1dF9jb250YWluZXJfdGV4dCc+PGlucHV0IG5hbWU9J2lucHV0XzcnIGlkPSdpbnB1dF83XzcnIHR5cGU9J3RleHQnIHZhbHVlPScnIGNsYXNzPSdsYXJnZScgICB0YWJpbmRleD0nMTAxMycgcGxhY2Vob2xkZXI9J05hbWUnIGFyaWEtcmVxdWlyZWQ9InRydWUiIGFyaWEtaW52YWxpZD0iZmFsc2UiICAgLz4gPC9kaXY+PC9saT48bGkgaWQ9ImZpZWxkXzdfOCIgY2xhc3M9ImdmaWVsZCBnZmllbGQtLXR5cGUtcGhvbmUgZ2ZpZWxkX2NvbnRhaW5zX3JlcXVpcmVkIGZpZWxkX3N1YmxhYmVsX2JlbG93IGdmaWVsZC0tbm8tZGVzY3JpcHRpb24gZmllbGRfZGVzY3JpcHRpb25fYmVsb3cgZ2ZpZWxkX3Zpc2liaWxpdHlfdmlzaWJsZSIgIGRhdGEtanMtcmVsb2FkPSJmaWVsZF83XzgiID48bGFiZWwgY2xhc3M9J2dmaWVsZF9sYWJlbCBnZm9ybS1maWVsZC1sYWJlbCcgZm9yPSdpbnB1dF83XzgnPlBob25lPHNwYW4gY2xhc3M9ImdmaWVsZF9yZXF1aXJlZCI+PHNwYW4gY2xhc3M9ImdmaWVsZF9yZXF1aXJlZCBnZmllbGRfcmVxdWlyZWRfYXN0ZXJpc2siPio8L3NwYW4+PC9zcGFuPjwvbGFiZWw+PGRpdiBjbGFzcz0nZ2lucHV0X2NvbnRhaW5lciBnaW5wdXRfY29udGFpbmVyX3Bob25lJz48aW5wdXQgbmFtZT0naW5wdXRfOCcgaWQ9J2lucHV0XzdfOCcgdHlwZT0ndGVsJyB2YWx1ZT0nJyBjbGFzcz0nbGFyZ2UnIHRhYmluZGV4PScxMDE0JyBwbGFjZWhvbGRlcj0nUGhvbmUnIGFyaWEtcmVxdWlyZWQ9InRydWUiIGFyaWEtaW52YWxpZD0iZmFsc2UiICAgLz48L2Rpdj48L2xpPjxsaSBpZD0iZmllbGRfN18zIiBjbGFzcz0iZ2ZpZWxkIGdmaWVsZC0tdHlwZS1lbWFpbCB6dXJlay1lbWFpbCBnZmllbGRfY29udGFpbnNfcmVxdWlyZWQgZmllbGRfc3VibGFiZWxfYmVsb3cgZ2ZpZWxkLS1uby1kZXNjcmlwdGlvbiBmaWVsZF9kZXNjcmlwdGlvbl9iZWxvdyBnZmllbGRfdmlzaWJpbGl0eV92aXNpYmxlIiAgZGF0YS1qcy1yZWxvYWQ9ImZpZWxkXzdfMyIgPjxsYWJlbCBjbGFzcz0nZ2ZpZWxkX2xhYmVsIGdmb3JtLWZpZWxkLWxhYmVsJyBmb3I9J2lucHV0XzdfMyc+RW1haWw8c3BhbiBjbGFzcz0iZ2ZpZWxkX3JlcXVpcmVkIj48c3BhbiBjbGFzcz0iZ2ZpZWxkX3JlcXVpcmVkIGdmaWVsZF9yZXF1aXJlZF9hc3RlcmlzayI+Kjwvc3Bhbj48L3NwYW4+PC9sYWJlbD48ZGl2IGNsYXNzPSdnaW5wdXRfY29udGFpbmVyIGdpbnB1dF9jb250YWluZXJfZW1haWwnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9J2lucHV0XzMnIGlkPSdpbnB1dF83XzMnIHR5cGU9J2VtYWlsJyB2YWx1ZT0nJyBjbGFzcz0nbGFyZ2UnIHRhYmluZGV4PScxMDE1JyAgcGxhY2Vob2xkZXI9J0VtYWlsJyBhcmlhLXJlcXVpcmVkPSJ0cnVlIiBhcmlhLWludmFsaWQ9ImZhbHNlIiAgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+PC9saT48bGkgaWQ9ImZpZWxkXzdfOSIgY2xhc3M9ImdmaWVsZCBnZmllbGQtLXR5cGUtaG9uZXlwb3QgZ2Zvcm1fdmFsaWRhdGlvbl9jb250YWluZXIgZmllbGRfc3VibGFiZWxfYmVsb3cgZ2ZpZWxkLS1oYXMtZGVzY3JpcHRpb24gZmllbGRfZGVzY3JpcHRpb25fYmVsb3cgZ2ZpZWxkX3Zpc2liaWxpdHlfdmlzaWJsZSIgIGRhdGEtanMtcmVsb2FkPSJmaWVsZF83XzkiID48bGFiZWwgY2xhc3M9J2dmaWVsZF9sYWJlbCBnZm9ybS1maWVsZC1sYWJlbCcgZm9yPSdpbnB1dF83XzknPkNvbW1lbnRzPC9sYWJlbD48ZGl2IGNsYXNzPSdnaW5wdXRfY29udGFpbmVyJz48aW5wdXQgbmFtZT0naW5wdXRfOScgaWQ9J2lucHV0XzdfOScgdHlwZT0ndGV4dCcgdmFsdWU9JycgYXV0b2NvbXBsZXRlPSduZXctcGFzc3dvcmQnLz48L2Rpdj48ZGl2IGNsYXNzPSdnZmllbGRfZGVzY3JpcHRpb24nIGlkPSdnZmllbGRfZGVzY3JpcHRpb25fN185Jz5UaGlzIGZpZWxkIGlzIGZvciB2YWxpZGF0aW9uIHB1cnBvc2VzIGFuZCBzaG91bGQgYmUgbGVmdCB1bmNoYW5nZWQuPC9kaXY+PC9saT48L3VsPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9J2dmb3JtX2Zvb3RlciB0b3BfbGFiZWwnPiA8aW5wdXQgdHlwZT0nc3VibWl0JyBpZD0nZ2Zvcm1fc3VibWl0X2J1dHRvbl83JyBjbGFzcz0nZ2Zvcm1fYnV0dG9uIGJ1dHRvbicgdmFsdWU9J1NlbmQgbXkgYmVmb3JlL2FmdGVyIGJyb2NodXJlJyB0YWJpbmRleD0nMTAxNicgb25jbGljaz0naWYod2luZG93WyJnZl9zdWJtaXR0aW5nXzciXSl7cmV0dXJuIGZhbHNlO30gIGlmKCAhalF1ZXJ5KCIjZ2Zvcm1fNyIpWzBdLmNoZWNrVmFsaWRpdHkgfHwgalF1ZXJ5KCIjZ2Zvcm1fNyIpWzBdLmNoZWNrVmFsaWRpdHkoKSl7d2luZG93WyJnZl9zdWJtaXR0aW5nXzciXT10cnVlO30gICcgb25rZXlwcmVzcz0naWYoIGV2ZW50LmtleUNvZGUgPT0gMTMgKXsgaWYod2luZG93WyJnZl9zdWJtaXR0aW5nXzciXSl7cmV0dXJuIGZhbHNlO30gaWYoICFqUXVlcnkoIiNnZm9ybV83IilbMF0uY2hlY2tWYWxpZGl0eSB8fCBqUXVlcnkoIiNnZm9ybV83IilbMF0uY2hlY2tWYWxpZGl0eSgpKXt3aW5kb3dbImdmX3N1Ym1pdHRpbmdfNyJdPXRydWU7fSAgalF1ZXJ5KCIjZ2Zvcm1fNyIpLnRyaWdnZXIoInN1Ym1pdCIsW3RydWVdKTsgfScgLz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nZ2Zvcm1fYWpheCcgdmFsdWU9J2Zvcm1faWQ9NyZhbXA7dGl0bGU9JmFtcDtkZXNjcmlwdGlvbj0mYW1wO3RhYmluZGV4PTAmYW1wO3RoZW1lPWxlZ2FjeScgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0naXNfc3VibWl0XzcnIHZhbHVlPScxJyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdnZm9ybV9zdWJtaXQnIHZhbHVlPSc3JyAvPgogICAgICAgICAgICAKICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0nZ2Zvcm1fdW5pcXVlX2lkJyB2YWx1ZT0nJyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdzdGF0ZV83JyB2YWx1ZT0nV3lKYlhTSXNJak14TldVNU9UWTFaV0poWlRFMk1qZzNZbVJoTldaalptVXpaREEzTTJSa0lsMD0nIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J2dmb3JtX3RhcmdldF9wYWdlX251bWJlcl83JyBpZD0nZ2Zvcm1fdGFyZ2V0X3BhZ2VfbnVtYmVyXzcnIHZhbHVlPScwJyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdnZm9ybV9zb3VyY2VfcGFnZV9udW1iZXJfNycgaWQ9J2dmb3JtX3NvdXJjZV9wYWdlX251bWJlcl83JyB2YWx1ZT0nMScgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nZ2Zvcm1fZmllbGRfdmFsdWVzJyB2YWx1ZT0nJyAvPgogICAgICAgICAgICAKICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCQkgICAgICAgICAgICAgICAgPGlmcmFtZSBzdHlsZT0nZGlzcGxheTpub25lO3dpZHRoOjBweDtoZWlnaHQ6MHB4Oycgc3JjPSdhYm91dDpibGFuaycgbmFtZT0nZ2Zvcm1fYWpheF9mcmFtZV83JyBpZD0nZ2Zvcm1fYWpheF9mcmFtZV83JyB0aXRsZT0nVGhpcyBpZnJhbWUgY29udGFpbnMgdGhlIGxvZ2ljIHJlcXVpcmVkIHRvIGhhbmRsZSBBamF4IHBvd2VyZWQgR3Jhdml0eSBGb3Jtcy4nPjwvaWZyYW1lPgoJCSAgICAgICAgICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci8qIDwhW0NEQVRBWyAqLwogZ2Zvcm0uaW5pdGlhbGl6ZU9uTG9hZGVkKCBmdW5jdGlvbigpIHtnZm9ybUluaXRTcGlubmVyKCA3LCAnaHR0cHM6Ly93d3cuZHJ6dXJlay5jb20uYXUvd3AtY29udGVudC9wbHVnaW5zL2dyYXZpdHlmb3Jtcy9pbWFnZXMvc3Bpbm5lci5zdmcnLCB0cnVlICk7alF1ZXJ5KCcjZ2Zvcm1fYWpheF9mcmFtZV83Jykub24oJ2xvYWQnLGZ1bmN0aW9uKCl7dmFyIGNvbnRlbnRzID0galF1ZXJ5KHRoaXMpLmNvbnRlbnRzKCkuZmluZCgnKicpLmh0bWwoKTt2YXIgaXNfcG9zdGJhY2sgPSBjb250ZW50cy5pbmRleE9mKCdHRl9BSkFYX1BPU1RCQUNLJykgPj0gMDtpZighaXNfcG9zdGJhY2spe3JldHVybjt9dmFyIGZvcm1fY29udGVudCA9IGpRdWVyeSh0aGlzKS5jb250ZW50cygpLmZpbmQoJyNnZm9ybV93cmFwcGVyXzcnKTt2YXIgaXNfY29uZmlybWF0aW9uID0galF1ZXJ5KHRoaXMpLmNvbnRlbnRzKCkuZmluZCgnI2dmb3JtX2NvbmZpcm1hdGlvbl93cmFwcGVyXzcnKS5sZW5ndGggPiAwO3ZhciBpc19yZWRpcmVjdCA9IGNvbnRlbnRzLmluZGV4T2YoJ2dmb3JtUmVkaXJlY3QoKXsnKSA+PSAwO3ZhciBpc19mb3JtID0gZm9ybV9jb250ZW50Lmxlbmd0aCA+IDAgJiYgISBpc19yZWRpcmVjdCAmJiAhIGlzX2NvbmZpcm1hdGlvbjt2YXIgbXQgPSBwYXJzZUludChqUXVlcnkoJ2h0bWwnKS5jc3MoJ21hcmdpbi10b3AnKSwgMTApICsgcGFyc2VJbnQoalF1ZXJ5KCdib2R5JykuY3NzKCdtYXJnaW4tdG9wJyksIDEwKSArIDEwMDtpZihpc19mb3JtKXtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzcnKS5odG1sKGZvcm1fY29udGVudC5odG1sKCkpO2lmKGZvcm1fY29udGVudC5oYXNDbGFzcygnZ2Zvcm1fdmFsaWRhdGlvbl9lcnJvcicpKXtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzcnKS5hZGRDbGFzcygnZ2Zvcm1fdmFsaWRhdGlvbl9lcnJvcicpO30gZWxzZSB7alF1ZXJ5KCcjZ2Zvcm1fd3JhcHBlcl83JykucmVtb3ZlQ2xhc3MoJ2dmb3JtX3ZhbGlkYXRpb25fZXJyb3InKTt9c2V0VGltZW91dCggZnVuY3Rpb24oKSB7IC8qIGRlbGF5IHRoZSBzY3JvbGwgYnkgNTAgbWlsbGlzZWNvbmRzIHRvIGZpeCBhIGJ1ZyBpbiBjaHJvbWUgKi8galF1ZXJ5KGRvY3VtZW50KS5zY3JvbGxUb3AoalF1ZXJ5KCcjZ2Zvcm1fd3JhcHBlcl83Jykub2Zmc2V0KCkudG9wIC0gbXQpOyB9LCA1MCApO2lmKHdpbmRvd1snZ2Zvcm1Jbml0RGF0ZXBpY2tlciddKSB7Z2Zvcm1Jbml0RGF0ZXBpY2tlcigpO31pZih3aW5kb3dbJ2dmb3JtSW5pdFByaWNlRmllbGRzJ10pIHtnZm9ybUluaXRQcmljZUZpZWxkcygpO312YXIgY3VycmVudF9wYWdlID0galF1ZXJ5KCcjZ2Zvcm1fc291cmNlX3BhZ2VfbnVtYmVyXzcnKS52YWwoKTtnZm9ybUluaXRTcGlubmVyKCA3LCAnaHR0cHM6Ly93d3cuZHJ6dXJlay5jb20uYXUvd3AtY29udGVudC9wbHVnaW5zL2dyYXZpdHlmb3Jtcy9pbWFnZXMvc3Bpbm5lci5zdmcnLCB0cnVlICk7alF1ZXJ5KGRvY3VtZW50KS50cmlnZ2VyKCdnZm9ybV9wYWdlX2xvYWRlZCcsIFs3LCBjdXJyZW50X3BhZ2VdKTt3aW5kb3dbJ2dmX3N1Ym1pdHRpbmdfNyddID0gZmFsc2U7fWVsc2UgaWYoIWlzX3JlZGlyZWN0KXt2YXIgY29uZmlybWF0aW9uX2NvbnRlbnQgPSBqUXVlcnkodGhpcykuY29udGVudHMoKS5maW5kKCcuR0ZfQUpBWF9QT1NUQkFDSycpLmh0bWwoKTtpZighY29uZmlybWF0aW9uX2NvbnRlbnQpe2NvbmZpcm1hdGlvbl9jb250ZW50ID0gY29udGVudHM7fXNldFRpbWVvdXQoZnVuY3Rpb24oKXtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzcnKS5yZXBsYWNlV2l0aChjb25maXJtYXRpb25fY29udGVudCk7alF1ZXJ5KGRvY3VtZW50KS5zY3JvbGxUb3AoalF1ZXJ5KCcjZ2ZfNycpLm9mZnNldCgpLnRvcCAtIG10KTtqUXVlcnkoZG9jdW1lbnQpLnRyaWdnZXIoJ2dmb3JtX2NvbmZpcm1hdGlvbl9sb2FkZWQnLCBbN10pO3dpbmRvd1snZ2Zfc3VibWl0dGluZ183J10gPSBmYWxzZTt3cC5hMTF5LnNwZWFrKGpRdWVyeSgnI2dmb3JtX2NvbmZpcm1hdGlvbl9tZXNzYWdlXzcnKS50ZXh0KCkpO30sIDUwKTt9ZWxzZXtqUXVlcnkoJyNnZm9ybV83JykuYXBwZW5kKGNvbnRlbnRzKTtpZih3aW5kb3dbJ2dmb3JtUmVkaXJlY3QnXSkge2dmb3JtUmVkaXJlY3QoKTt9fWpRdWVyeShkb2N1bWVudCkudHJpZ2dlcigiZ2Zvcm1fcHJlX3Bvc3RfcmVuZGVyIiwgW3sgZm9ybUlkOiAiNyIsIGN1cnJlbnRQYWdlOiAiY3VycmVudF9wYWdlIiwgYWJvcnQ6IGZ1bmN0aW9uKCkgeyB0aGlzLnByZXZlbnREZWZhdWx0KCk7IH0gfV0pOyAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgeyAgICAgICAgICAgICAgICByZXR1cm47ICAgICAgICAgfSAgICAgICAgY29uc3QgZ2Zvcm1XcmFwcGVyRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICJnZm9ybV93cmFwcGVyXzciICk7ICAgICAgICBpZiAoIGdmb3JtV3JhcHBlckRpdiApIHsgICAgICAgICAgICBjb25zdCB2aXNpYmlsaXR5U3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJzcGFuIiApOyAgICAgICAgICAgIHZpc2liaWxpdHlTcGFuLmlkID0gImdmb3JtX3Zpc2liaWxpdHlfdGVzdF83IjsgICAgICAgICAgICBnZm9ybVdyYXBwZXJEaXYuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCAiYWZ0ZXJlbmQiLCB2aXNpYmlsaXR5U3BhbiApOyAgICAgICAgfSAgICAgICAgY29uc3QgdmlzaWJpbGl0eVRlc3REaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggImdmb3JtX3Zpc2liaWxpdHlfdGVzdF83IiApOyAgICAgICAgbGV0IHBvc3RSZW5kZXJGaXJlZCA9IGZhbHNlOyAgICAgICAgICAgICAgICBmdW5jdGlvbiB0cmlnZ2VyUG9zdFJlbmRlcigpIHsgICAgICAgICAgICBpZiAoIHBvc3RSZW5kZXJGaXJlZCApIHsgICAgICAgICAgICAgICAgcmV0dXJuOyAgICAgICAgICAgIH0gICAgICAgICAgICBwb3N0UmVuZGVyRmlyZWQgPSB0cnVlOyAgICAgICAgICAgIGpRdWVyeSggZG9jdW1lbnQgKS50cmlnZ2VyKCAnZ2Zvcm1fcG9zdF9yZW5kZXInLCBbNywgY3VycmVudF9wYWdlXSApOyAgICAgICAgICAgIGdmb3JtLnV0aWxzLnRyaWdnZXIoIHsgZXZlbnQ6ICdnZm9ybS9wb3N0UmVuZGVyJywgbmF0aXZlOiBmYWxzZSwgZGF0YTogeyBmb3JtSWQ6IDcsIGN1cnJlbnRQYWdlOiBjdXJyZW50X3BhZ2UgfSB9ICk7ICAgICAgICAgICAgaWYgKCB2aXNpYmlsaXR5VGVzdERpdiApIHsgICAgICAgICAgICAgICAgdmlzaWJpbGl0eVRlc3REaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggdmlzaWJpbGl0eVRlc3REaXYgKTsgICAgICAgICAgICB9ICAgICAgICB9ICAgICAgICBmdW5jdGlvbiBkZWJvdW5jZSggZnVuYywgd2FpdCwgaW1tZWRpYXRlICkgeyAgICAgICAgICAgIHZhciB0aW1lb3V0OyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsgICAgICAgICAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyAgICAgICAgICAgICAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHsgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBudWxsOyAgICAgICAgICAgICAgICAgICAgaWYgKCAhaW1tZWRpYXRlICkgZnVuYy5hcHBseSggY29udGV4dCwgYXJncyApOyAgICAgICAgICAgICAgICB9OyAgICAgICAgICAgICAgICB2YXIgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDsgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7ICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCBsYXRlciwgd2FpdCApOyAgICAgICAgICAgICAgICBpZiAoIGNhbGxOb3cgKSBmdW5jLmFwcGx5KCBjb250ZXh0LCBhcmdzICk7ICAgICAgICAgICAgfTsgICAgICAgIH0gICAgICAgIGNvbnN0IGRlYm91bmNlZFRyaWdnZXJQb3N0UmVuZGVyID0gZGVib3VuY2UoIGZ1bmN0aW9uKCkgeyAgICAgICAgICAgIHRyaWdnZXJQb3N0UmVuZGVyKCk7ICAgICAgICB9LCAyMDAgKTsgICAgICAgIGlmICggdmlzaWJpbGl0eVRlc3REaXYgJiYgdmlzaWJpbGl0eVRlc3REaXYub2Zmc2V0UGFyZW50ID09PSBudWxsICkgeyAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoICggbXV0YXRpb25zICkgPT4geyAgICAgICAgICAgICAgICBtdXRhdGlvbnMuZm9yRWFjaCggKCBtdXRhdGlvbiApID0+IHsgICAgICAgICAgICAgICAgICAgIGlmICggbXV0YXRpb24udHlwZSA9PT0gJ2F0dHJpYnV0ZXMnICYmIHZpc2liaWxpdHlUZXN0RGl2Lm9mZnNldFBhcmVudCAhPT0gbnVsbCApIHsgICAgICAgICAgICAgICAgICAgICAgICBkZWJvdW5jZWRUcmlnZ2VyUG9zdFJlbmRlcigpOyAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgfSk7ICAgICAgICAgICAgfSk7ICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSggZG9jdW1lbnQuYm9keSwgeyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLCAgICAgICAgICAgICAgICBjaGlsZExpc3Q6IGZhbHNlLCAgICAgICAgICAgICAgICBzdWJ0cmVlOiB0cnVlLCAgICAgICAgICAgICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFsgJ3N0eWxlJywgJ2NsYXNzJyBdLCAgICAgICAgICAgIH0pOyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICB0cmlnZ2VyUG9zdFJlbmRlcigpOyAgICAgICAgfSAgICB9ICk7fSApOyAKLyogXV0+ICovCjwvc2NyaXB0Pgo=