3NAxHUEaM6RAG7rVDPL9L6DFZWkrqFtY98t · data · Chart.bundle.min.js?4?1?1
{
    "Chart.bundle.min.js?4?1?1": "base64:LGgucHVzaChpKTtyZXR1cm4gaH0sX3RpY2tTaXplOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQuaXNIb3Jpem9udGFsKCksaT10Lm9wdGlvbnMudGlja3MubWlub3Isbj11dC50b1JhZGlhbnModC5sYWJlbFJvdGF0aW9uKSxhPU1hdGguYWJzKE1hdGguY29zKG4pKSxyPU1hdGguYWJzKE1hdGguc2luKG4pKSxvPWkuYXV0b1NraXBQYWRkaW5nfHwwLHM9dC5sb25nZXN0TGFiZWxXaWR0aCtvfHwwLGw9dXQub3B0aW9ucy5fcGFyc2VGb250KGkpLHU9dC5fbWF4TGFiZWxMaW5lcypsLmxpbmVIZWlnaHQrb3x8MDtyZXR1cm4gZT91KmE+cypyP3MvYTp1L3I6dSpyPHMqYT91L2E6cy9yfSxfaXNWaXNpYmxlOmZ1bmN0aW9uKCl7dmFyIHQsZSxpLG49dGhpcy5jaGFydCxhPXRoaXMub3B0aW9ucy5kaXNwbGF5O2lmKCJhdXRvIiE9PWEpcmV0dXJuISFhO2Zvcih0PTAsZT1uLmRhdGEuZGF0YXNldHMubGVuZ3RoO3Q8ZTsrK3QpaWYobi5pc0RhdGFzZXRWaXNpYmxlKHQpJiYoKGk9bi5nZXREYXRhc2V0TWV0YSh0KSkueEF4aXNJRD09PXRoaXMuaWR8fGkueUF4aXNJRD09PXRoaXMuaWQpKXJldHVybiEwO3JldHVybiExfSxkcmF3OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT1lLm9wdGlvbnM7aWYoZS5faXNWaXNpYmxlKCkpe3ZhciBuLGEscixvPWUuY2hhcnQscz1lLmN0eCxsPW90Lmdsb2JhbC5kZWZhdWx0Rm9udENvbG9yLHU9aS50aWNrcy5taW5vcixkPWkudGlja3MubWFqb3J8fHUsaD1pLmdyaWRMaW5lcyxjPWkuc2NhbGVMYWJlbCxmPWkucG9zaXRpb24sZz0wIT09ZS5sYWJlbFJvdGF0aW9uLG09dS5taXJyb3IscD1lLmlzSG9yaXpvbnRhbCgpLHY9dXQub3B0aW9ucy5fcGFyc2VGb250LHk9dS5kaXNwbGF5JiZ1LmF1dG9Ta2lwP2UuX2F1dG9Ta2lwKGUuZ2V0VGlja3MoKSk6ZS5nZXRUaWNrcygpLGI9dWkodS5mb250Q29sb3IsbCkseD12KHUpLF89eC5saW5lSGVpZ2h0LGs9dWkoZC5mb250Q29sb3IsbCksdz12KGQpLE09dS5wYWRkaW5nLFM9dS5sYWJlbE9mZnNldCxEPWguZHJhd1RpY2tzP2gudGlja01hcmtMZW5ndGg6MCxDPXVpKGMuZm9udENvbG9yLGwpLFA9dihjKSxUPXV0Lm9wdGlvbnMudG9QYWRkaW5nKGMucGFkZGluZyksTz11dC50b1JhZGlhbnMoZS5sYWJlbFJvdGF0aW9uKSxJPVtdLEE9aC5kcmF3Qm9yZGVyP2RpKGgubGluZVdpZHRoLDAsMCk6MCxGPXV0Ll9hbGlnblBpeGVsOyJ0b3AiPT09Zj8obj1GKG8sZS5ib3R0b20sQSksYT1lLmJvdHRvbS1ELHI9bi1BLzIpOiJib3R0b20iPT09Zj8obj1GKG8sZS50b3AsQSksYT1uK0EvMixyPWUudG9wK0QpOiJsZWZ0Ij09PWY/KG49RihvLGUucmlnaHQsQSksYT1lLnJpZ2h0LUQscj1uLUEvMik6KG49RihvLGUubGVmdCxBKSxhPW4rQS8yLHI9ZS5sZWZ0K0QpO2lmKHV0LmVhY2goeSxmdW5jdGlvbihuLHMpe2lmKCF1dC5pc051bGxPclVuZGVmKG4ubGFiZWwpKXt2YXIgbCx1LGQsYyx2LHksYix4LGssdyxDLFAsVCxSLEwsVyxZPW4ubGFiZWw7cz09PWUuemVyb0xpbmVJbmRleCYmaS5vZmZzZXQ9PT1oLm9mZnNldEdyaWRMaW5lcz8obD1oLnplcm9MaW5lV2lkdGgsdT1oLnplcm9MaW5lQ29sb3IsZD1oLnplcm9MaW5lQm9yZGVyRGFzaHx8W10sYz1oLnplcm9MaW5lQm9yZGVyRGFzaE9mZnNldHx8MCk6KGw9ZGkoaC5saW5lV2lkdGgscyksdT1kaShoLmNvbG9yLHMpLGQ9aC5ib3JkZXJEYXNofHxbXSxjPWguYm9yZGVyRGFzaE9mZnNldHx8MCk7dmFyIE49dXQuaXNBcnJheShZKT9ZLmxlbmd0aDoxLHo9ZnVuY3Rpb24odCxlLGkpe3ZhciBuPXQuZ2V0UGl4ZWxGb3JUaWNrKGUpO3JldHVybiBpJiYoMT09PXQuZ2V0VGlja3MoKS5sZW5ndGg/bi09dC5pc0hvcml6b250YWwoKT9NYXRoLm1heChuLXQubGVmdCx0LnJpZ2h0LW4pOk1hdGgubWF4KG4tdC50b3AsdC5ib3R0b20tbik6bi09MD09PWU/KHQuZ2V0UGl4ZWxGb3JUaWNrKDEpLW4pLzI6KG4tdC5nZXRQaXhlbEZvclRpY2soZS0xKSkvMiksbn0oZSxzLGgub2Zmc2V0R3JpZExpbmVzKTtpZihwKXt2YXIgVj1EK007ejxlLmxlZnQtMWUtNyYmKHU9InJnYmEoMCwwLDAsMCkiKSx2PWI9az1DPUYobyx6LGwpLHk9YSx4PXIsVD1lLmdldFBpeGVsRm9yVGljayhzKStTLCJ0b3AiPT09Zj8odz1GKG8sdC50b3AsQSkrQS8yLFA9dC5ib3R0b20sTD0oKGc/MTouNSktTikqXyxXPWc/ImxlZnQiOiJjZW50ZXIiLFI9ZS5ib3R0b20tVik6KHc9dC50b3AsUD1GKG8sdC5ib3R0b20sQSktQS8yLEw9KGc/MDouNSkqXyxXPWc/InJpZ2h0IjoiY2VudGVyIixSPWUudG9wK1YpfWVsc2V7dmFyIEg9KG0/MDpEKStNO3o8ZS50b3AtMWUtNyYmKHU9InJnYmEoMCwwLDAsMCkiKSx2PWEsYj1yLHk9eD13PVA9RihvLHosbCksUj1lLmdldFBpeGVsRm9yVGljayhzKStTLEw9KDEtTikqXy8yLCJsZWZ0Ij09PWY/KGs9RihvLHQubGVmdCxBKStBLzIsQz10LnJpZ2h0LFc9bT8ibGVmdCI6InJpZ2h0IixUPWUucmlnaHQtSCk6KGs9dC5sZWZ0LEM9RihvLHQucmlnaHQsQSktQS8yLFc9bT8icmlnaHQiOiJsZWZ0IixUPWUubGVmdCtIKX1JLnB1c2goe3R4MTp2LHR5MTp5LHR4MjpiLHR5Mjp4LHgxOmsseTE6dyx4MjpDLHkyOlAsbGFiZWxYOlQsbGFiZWxZOlIsZ2xXaWR0aDpsLGdsQ29sb3I6dSxnbEJvcmRlckRhc2g6ZCxnbEJvcmRlckRhc2hPZmZzZXQ6Yyxyb3RhdGlvbjotMSpPLGxhYmVsOlksbWFqb3I6bi5tYWpvcix0ZXh0T2Zmc2V0OkwsdGV4dEFsaWduOld9KX19KSx1dC5lYWNoKEksZnVuY3Rpb24odCl7dmFyIGU9dC5nbFdpZHRoLGk9dC5nbENvbG9yO2lmKGguZGlzcGxheSYmZSYmaSYmKHMuc2F2ZSgpLHMubGluZVdpZHRoPWUscy5zdHJva2VTdHlsZT1pLHMuc2V0TGluZURhc2gmJihzLnNldExpbmVEYXNoKHQuZ2xCb3JkZXJEYXNoKSxzLmxpbmVEYXNoT2Zmc2V0PXQuZ2xCb3JkZXJEYXNoT2Zmc2V0KSxzLmJlZ2luUGF0aCgpLGguZHJhd1RpY2tzJiYocy5tb3ZlVG8odC50eDEsdC50eTEpLHMubGluZVRvKHQudHgyLHQudHkyKSksaC5kcmF3T25DaGFydEFyZWEmJihzLm1vdmVUbyh0LngxLHQueTEpLHMubGluZVRvKHQueDIsdC55MikpLHMuc3Ryb2tlKCkscy5yZXN0b3JlKCkpLHUuZGlzcGxheSl7cy5zYXZlKCkscy50cmFuc2xhdGUodC5sYWJlbFgsdC5sYWJlbFkpLHMucm90YXRlKHQucm90YXRpb24pLHMuZm9udD10Lm1ham9yP3cuc3RyaW5nOnguc3RyaW5nLHMuZmlsbFN0eWxlPXQubWFqb3I/azpiLHMudGV4dEJhc2VsaW5lPSJtaWRkbGUiLHMudGV4dEFsaWduPXQudGV4dEFsaWduO3ZhciBuPXQubGFiZWwsYT10LnRleHRPZmZzZXQ7aWYodXQuaXNBcnJheShuKSlmb3IodmFyIHI9MDtyPG4ubGVuZ3RoOysrcilzLmZpbGxUZXh0KCIiK25bcl0sMCxhKSxhKz1fO2Vsc2Ugcy5maWxsVGV4dChuLDAsYSk7cy5yZXN0b3JlKCl9fSksYy5kaXNwbGF5KXt2YXIgUixMLFc9MCxZPVAubGluZUhlaWdodC8yO2lmKHApUj1lLmxlZnQrKGUucmlnaHQtZS5sZWZ0KS8yLEw9ImJvdHRvbSI9PT1mP2UuYm90dG9tLVktVC5ib3R0b206ZS50b3ArWStULnRvcDtlbHNle3ZhciBOPSJsZWZ0Ij09PWY7Uj1OP2UubGVmdCtZK1QudG9wOmUucmlnaHQtWS1ULnRvcCxMPWUudG9wKyhlLmJvdHRvbS1lLnRvcCkvMixXPU4/LS41Kk1hdGguUEk6LjUqTWF0aC5QSX1zLnNhdmUoKSxzLnRyYW5zbGF0ZShSLEwpLHMucm90YXRlKFcpLHMudGV4dEFsaWduPSJjZW50ZXIiLHMudGV4dEJhc2VsaW5lPSJtaWRkbGUiLHMuZmlsbFN0eWxlPUMscy5mb250PVAuc3RyaW5nLHMuZmlsbFRleHQoYy5sYWJlbFN0cmluZywwLDApLHMucmVzdG9yZSgpfWlmKEEpe3ZhciB6LFYsSCxFLEI9QSxqPWRpKGgubGluZVdpZHRoLHkubGVuZ3RoLTEsMCk7cD8oej1GKG8sZS5sZWZ0LEIpLUIvMixWPUYobyxlLnJpZ2h0LGopK2ovMixIPUU9bik6KEg9RihvLGUudG9wLEIpLUIvMixFPUYobyxlLmJvdHRvbSxqKStqLzIsej1WPW4pLHMubGluZVdpZHRoPUEscy5zdHJva2VTdHlsZT1kaShoLmNvbG9yLDApLHMuYmVnaW5QYXRoKCkscy5tb3ZlVG8oeixIKSxzLmxpbmVUbyhWLEUpLHMuc3Ryb2tlKCl9fX19KSxnaT1maS5leHRlbmQoe2dldExhYmVsczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY2hhcnQuZGF0YTtyZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsc3x8KHRoaXMuaXNIb3Jpem9udGFsKCk/dC54TGFiZWxzOnQueUxhYmVscyl8fHQubGFiZWxzfSxkZXRlcm1pbmVEYXRhTGltaXRzOmZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLGk9ZS5nZXRMYWJlbHMoKTtlLm1pbkluZGV4PTAsZS5tYXhJbmRleD1pLmxlbmd0aC0xLHZvaWQgMCE9PWUub3B0aW9ucy50aWNrcy5taW4mJih0PWkuaW5kZXhPZihlLm9wdGlvbnMudGlja3MubWluKSxlLm1pbkluZGV4PS0xIT09dD90OmUubWluSW5kZXgpLHZvaWQgMCE9PWUub3B0aW9ucy50aWNrcy5tYXgmJih0PWkuaW5kZXhPZihlLm9wdGlvbnMudGlja3MubWF4KSxlLm1heEluZGV4PS0xIT09dD90OmUubWF4SW5kZXgpLGUubWluPWlbZS5taW5JbmRleF0sZS5tYXg9aVtlLm1heEluZGV4XX0sYnVpbGRUaWNrczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LmdldExhYmVscygpO3QudGlja3M9MD09PXQubWluSW5kZXgmJnQubWF4SW5kZXg9PT1lLmxlbmd0aC0xP2U6ZS5zbGljZSh0Lm1pbkluZGV4LHQubWF4SW5kZXgrMSl9LGdldExhYmVsRm9ySW5kZXg6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLG49aS5jaGFydDtyZXR1cm4gbi5nZXREYXRhc2V0TWV0YShlKS5jb250cm9sbGVyLl9nZXRWYWx1ZVNjYWxlSWQoKT09PWkuaWQ/aS5nZXRSaWdodFZhbHVlKG4uZGF0YS5kYXRhc2V0c1tlXS5kYXRhW3RdKTppLnRpY2tzW3QtaS5taW5JbmRleF19LGdldFBpeGVsRm9yVmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaSxuPXRoaXMsYT1uLm9wdGlvbnMub2Zmc2V0LHI9TWF0aC5tYXgobi5tYXhJbmRleCsxLW4ubWluSW5kZXgtKGE/MDoxKSwxKTtpZihudWxsIT10JiYoaT1uLmlzSG9yaXpvbnRhbCgpP3QueDp0LnkpLHZvaWQgMCE9PWl8fHZvaWQgMCE9PXQmJmlzTmFOKGUpKXt0PWl8fHQ7dmFyIG89bi5nZXRMYWJlbHMoKS5pbmRleE9mKHQpO2U9LTEhPT1vP286ZX1pZihuLmlzSG9yaXpvbnRhbCgpKXt2YXIgcz1uLndpZHRoL3IsbD1zKihlLW4ubWluSW5kZXgpO3JldHVybiBhJiYobCs9cy8yKSxuLmxlZnQrbH12YXIgdT1uLmhlaWdodC9yLGQ9dSooZS1uLm1pbkluZGV4KTtyZXR1cm4gYSYmKGQrPXUvMiksbi50b3ArZH0sZ2V0UGl4ZWxGb3JUaWNrOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFBpeGVsRm9yVmFsdWUodGhpcy50aWNrc1t0XSx0K3RoaXMubWluSW5kZXgsbnVsbCl9LGdldFZhbHVlRm9yUGl4ZWw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPWUub3B0aW9ucy5vZmZzZXQsbj1NYXRoLm1heChlLl90aWNrcy5sZW5ndGgtKGk/MDoxKSwxKSxhPWUuaXNIb3Jpem9udGFsKCkscj0oYT9lLndpZHRoOmUuaGVpZ2h0KS9uO3JldHVybiB0LT1hP2UubGVmdDplLnRvcCxpJiYodC09ci8yKSwodDw9MD8wOk1hdGgucm91bmQodC9yKSkrZS5taW5JbmRleH0sZ2V0QmFzZVBpeGVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYm90dG9tfX0pLG1pPXtwb3NpdGlvbjoiYm90dG9tIn07Z2kuX2RlZmF1bHRzPW1pO3ZhciBwaT11dC5ub29wLHZpPXV0LmlzTnVsbE9yVW5kZWY7dmFyIHlpPWZpLmV4dGVuZCh7Z2V0UmlnaHRWYWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/K3Q6ZmkucHJvdG90eXBlLmdldFJpZ2h0VmFsdWUuY2FsbCh0aGlzLHQpfSxoYW5kbGVUaWNrUmFuZ2VPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQub3B0aW9ucy50aWNrcztpZihlLmJlZ2luQXRaZXJvKXt2YXIgaT11dC5zaWduKHQubWluKSxuPXV0LnNpZ24odC5tYXgpO2k8MCYmbjwwP3QubWF4PTA6aT4wJiZuPjAmJih0Lm1pbj0wKX12YXIgYT12b2lkIDAhPT1lLm1pbnx8dm9pZCAwIT09ZS5zdWdnZXN0ZWRNaW4scj12b2lkIDAhPT1lLm1heHx8dm9pZCAwIT09ZS5zdWdnZXN0ZWRNYXg7dm9pZCAwIT09ZS5taW4/dC5taW49ZS5taW46dm9pZCAwIT09ZS5zdWdnZXN0ZWRNaW4mJihudWxsPT09dC5taW4/dC5taW49ZS5zdWdnZXN0ZWRNaW46dC5taW49TWF0aC5taW4odC5taW4sZS5zdWdnZXN0ZWRNaW4pKSx2b2lkIDAhPT1lLm1heD90Lm1heD1lLm1heDp2b2lkIDAhPT1lLnN1Z2dlc3RlZE1heCYmKG51bGw9PT10Lm1heD90Lm1heD1lLnN1Z2dlc3RlZE1heDp0Lm1heD1NYXRoLm1heCh0Lm1heCxlLnN1Z2dlc3RlZE1heCkpLGEhPT1yJiZ0Lm1pbj49dC5tYXgmJihhP3QubWF4PXQubWluKzE6dC5taW49dC5tYXgtMSksdC5taW49PT10Lm1heCYmKHQubWF4KyssZS5iZWdpbkF0WmVyb3x8dC5taW4tLSl9LGdldFRpY2tMaW1pdDpmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5vcHRpb25zLnRpY2tzLGk9ZS5zdGVwU2l6ZSxuPWUubWF4VGlja3NMaW1pdDtyZXR1cm4gaT90PU1hdGguY2VpbCh0aGlzLm1heC9pKS1NYXRoLmZsb29yKHRoaXMubWluL2kpKzE6KHQ9dGhpcy5fY29tcHV0ZVRpY2tMaW1pdCgpLG49bnx8MTEpLG4mJih0PU1hdGgubWluKG4sdCkpLHR9LF9jb21wdXRlVGlja0xpbWl0OmZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5QT1NJVElWRV9JTkZJTklUWX0saGFuZGxlRGlyZWN0aW9uYWxDaGFuZ2VzOnBpLGJ1aWxkVGlja3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5vcHRpb25zLnRpY2tzLGk9dC5nZXRUaWNrTGltaXQoKSxuPXttYXhUaWNrczppPU1hdGgubWF4KDIsaSksbWluOmUubWluLG1heDplLm1heCxwcmVjaXNpb246ZS5wcmVjaXNpb24sc3RlcFNpemU6dXQudmFsdWVPckRlZmF1bHQoZS5maXhlZFN0ZXBTaXplLGUuc3RlcFNpemUpfSxhPXQudGlja3M9ZnVuY3Rpb24odCxlKXt2YXIgaSxuLGEscixvPVtdLHM9dC5zdGVwU2l6ZSxsPXN8fDEsdT10Lm1heFRpY2tzLTEsZD10Lm1pbixoPXQubWF4LGM9dC5wcmVjaXNpb24sZj1lLm1pbixnPWUubWF4LG09dXQubmljZU51bSgoZy1mKS91L2wpKmw7aWYobTwxZS0xNCYmdmkoZCkmJnZpKGgpKXJldHVybltmLGddOyhyPU1hdGguY2VpbChnL20pLU1hdGguZmxvb3IoZi9tKSk+dSYmKG09dXQubmljZU51bShyKm0vdS9sKSpsKSxzfHx2aShjKT9pPU1hdGgucG93KDEwLHV0Ll9kZWNpbWFsUGxhY2VzKG0pKTooaT1NYXRoLnBvdygxMCxjKSxtPU1hdGguY2VpbChtKmkpL2kpLG49TWF0aC5mbG9vcihmL20pKm0sYT1NYXRoLmNlaWwoZy9tKSptLHMmJighdmkoZCkmJnV0LmFsbW9zdFdob2xlKGQvbSxtLzFlMykmJihuPWQpLCF2aShoKSYmdXQuYWxtb3N0V2hvbGUoaC9tLG0vMWUzKSYmKGE9aCkpLHI9KGEtbikvbSxyPXV0LmFsbW9zdEVxdWFscyhyLE1hdGgucm91bmQociksbS8xZTMpP01hdGgucm91bmQocik6TWF0aC5jZWlsKHIpLG49TWF0aC5yb3VuZChuKmkpL2ksYT1NYXRoLnJvdW5kKGEqaSkvaSxvLnB1c2godmkoZCk/bjpkKTtmb3IodmFyIHA9MTtwPHI7KytwKW8ucHVzaChNYXRoLnJvdW5kKChuK3AqbSkqaSkvaSk7cmV0dXJuIG8ucHVzaCh2aShoKT9hOmgpLG99KG4sdCk7dC5oYW5kbGVEaXJlY3Rpb25hbENoYW5nZXMoKSx0Lm1heD11dC5tYXgoYSksdC5taW49dXQubWluKGEpLGUucmV2ZXJzZT8oYS5yZXZlcnNlKCksdC5zdGFydD10Lm1heCx0LmVuZD10Lm1pbik6KHQuc3RhcnQ9dC5taW4sdC5lbmQ9dC5tYXgpfSxjb252ZXJ0VGlja3NUb0xhYmVsczpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dC50aWNrc0FzTnVtYmVycz10LnRpY2tzLnNsaWNlKCksdC56ZXJvTGluZUluZGV4PXQudGlja3MuaW5kZXhPZigwKSxmaS5wcm90b3R5cGUuY29udmVydFRpY2tzVG9MYWJlbHMuY2FsbCh0KX19KSxiaT17cG9zaXRpb246ImxlZnQiLHRpY2tzOntjYWxsYmFjazpsaS5mb3JtYXR0ZXJzLmxpbmVhcn19LHhpPXlpLmV4dGVuZCh7ZGV0ZXJtaW5lRGF0YUxpbWl0czpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10Lm9wdGlvbnMsaT10LmNoYXJ0LG49aS5kYXRhLmRhdGFzZXRzLGE9dC5pc0hvcml6b250YWwoKTtmdW5jdGlvbiByKGUpe3JldHVybiBhP2UueEF4aXNJRD09PXQuaWQ6ZS55QXhpc0lEPT09dC5pZH10Lm1pbj1udWxsLHQubWF4PW51bGw7dmFyIG89ZS5zdGFja2VkO2lmKHZvaWQgMD09PW8mJnV0LmVhY2gobixmdW5jdGlvbih0LGUpe2lmKCFvKXt2YXIgbj1pLmdldERhdGFzZXRNZXRhKGUpO2kuaXNEYXRhc2V0VmlzaWJsZShlKSYmcihuKSYmdm9pZCAwIT09bi5zdGFjayYmKG89ITApfX0pLGUuc3RhY2tlZHx8byl7dmFyIHM9e307dXQuZWFjaChuLGZ1bmN0aW9uKG4sYSl7dmFyIG89aS5nZXREYXRhc2V0TWV0YShhKSxsPVtvLnR5cGUsdm9pZCAwPT09ZS5zdGFja2VkJiZ2b2lkIDA9PT1vLnN0YWNrP2E6IiIsby5zdGFja10uam9pbigiLiIpO3ZvaWQgMD09PXNbbF0mJihzW2xdPXtwb3NpdGl2ZVZhbHVlczpbXSxuZWdhdGl2ZVZhbHVlczpbXX0pO3ZhciB1PXNbbF0ucG9zaXRpdmVWYWx1ZXMsZD1zW2xdLm5lZ2F0aXZlVmFsdWVzO2kuaXNEYXRhc2V0VmlzaWJsZShhKSYmcihvKSYmdXQuZWFjaChuLmRhdGEsZnVuY3Rpb24oaSxuKXt2YXIgYT0rdC5nZXRSaWdodFZhbHVlKGkpO2lzTmFOKGEpfHxvLmRhdGFbbl0uaGlkZGVufHwodVtuXT11W25dfHwwLGRbbl09ZFtuXXx8MCxlLnJlbGF0aXZlUG9pbnRzP3Vbbl09MTAwOmE8MD9kW25dKz1hOnVbbl0rPWEpfSl9KSx1dC5lYWNoKHMsZnVuY3Rpb24oZSl7dmFyIGk9ZS5wb3NpdGl2ZVZhbHVlcy5jb25jYXQoZS5uZWdhdGl2ZVZhbHVlcyksbj11dC5taW4oaSksYT11dC5tYXgoaSk7dC5taW49bnVsbD09PXQubWluP246TWF0aC5taW4odC5taW4sbiksdC5tYXg9bnVsbD09PXQubWF4P2E6TWF0aC5tYXgodC5tYXgsYSl9KX1lbHNlIHV0LmVhY2gobixmdW5jdGlvbihlLG4pe3ZhciBhPWkuZ2V0RGF0YXNldE1ldGEobik7aS5pc0RhdGFzZXRWaXNpYmxlKG4pJiZyKGEpJiZ1dC5lYWNoKGUuZGF0YSxmdW5jdGlvbihlLGkpe3ZhciBuPSt0LmdldFJpZ2h0VmFsdWUoZSk7aXNOYU4obil8fGEuZGF0YVtpXS5oaWRkZW58fChudWxsPT09dC5taW4/dC5taW49bjpuPHQubWluJiYodC5taW49biksbnVsbD09PXQubWF4P3QubWF4PW46bj50Lm1heCYmKHQubWF4PW4pKX0pfSk7dC5taW49aXNGaW5pdGUodC5taW4pJiYhaXNOYU4odC5taW4pP3QubWluOjAsdC5tYXg9aXNGaW5pdGUodC5tYXgpJiYhaXNOYU4odC5tYXgpP3QubWF4OjEsdGhpcy5oYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCl9LF9jb21wdXRlVGlja0xpbWl0OmZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuaXNIb3Jpem9udGFsKCk/TWF0aC5jZWlsKHRoaXMud2lkdGgvNDApOih0PXV0Lm9wdGlvbnMuX3BhcnNlRm9udCh0aGlzLm9wdGlvbnMudGlja3MpLE1hdGguY2VpbCh0aGlzLmhlaWdodC90LmxpbmVIZWlnaHQpKX0saGFuZGxlRGlyZWN0aW9uYWxDaGFuZ2VzOmZ1bmN0aW9uKCl7dGhpcy5pc0hvcml6b250YWwoKXx8dGhpcy50aWNrcy5yZXZlcnNlKCl9LGdldExhYmVsRm9ySW5kZXg6ZnVuY3Rpb24odCxlKXtyZXR1cm4rdGhpcy5nZXRSaWdodFZhbHVlKHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1tlXS5kYXRhW3RdKX0sZ2V0UGl4ZWxGb3JWYWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9ZS5zdGFydCxuPStlLmdldFJpZ2h0VmFsdWUodCksYT1lLmVuZC1pO3JldHVybiBlLmlzSG9yaXpvbnRhbCgpP2UubGVmdCtlLndpZHRoL2EqKG4taSk6ZS5ib3R0b20tZS5oZWlnaHQvYSoobi1pKX0sZ2V0VmFsdWVGb3JQaXhlbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9ZS5pc0hvcml6b250YWwoKSxuPWk/ZS53aWR0aDplLmhlaWdodCxhPShpP3QtZS5sZWZ0OmUuYm90dG9tLXQpL247cmV0dXJuIGUuc3RhcnQrKGUuZW5kLWUuc3RhcnQpKmF9LGdldFBpeGVsRm9yVGljazpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRQaXhlbEZvclZhbHVlKHRoaXMudGlja3NBc051bWJlcnNbdF0pfX0pLF9pPWJpO3hpLl9kZWZhdWx0cz1faTt2YXIga2k9dXQudmFsdWVPckRlZmF1bHQ7dmFyIHdpPXtwb3NpdGlvbjoibGVmdCIsdGlja3M6e2NhbGxiYWNrOmxpLmZvcm1hdHRlcnMubG9nYXJpdGhtaWN9fTtmdW5jdGlvbiBNaSh0LGUpe3JldHVybiB1dC5pc0Zpbml0ZSh0KSYmdD49MD90OmV9dmFyIFNpPWZpLmV4dGVuZCh7ZGV0ZXJtaW5lRGF0YUxpbWl0czpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10Lm9wdGlvbnMsaT10LmNoYXJ0LG49aS5kYXRhLmRhdGFzZXRzLGE9dC5pc0hvcml6b250YWwoKTtmdW5jdGlvbiByKGUpe3JldHVybiBhP2UueEF4aXNJRD09PXQuaWQ6ZS55QXhpc0lEPT09dC5pZH10Lm1pbj1udWxsLHQubWF4PW51bGwsdC5taW5Ob3RaZXJvPW51bGw7dmFyIG89ZS5zdGFja2VkO2lmKHZvaWQgMD09PW8mJnV0LmVhY2gobixmdW5jdGlvbih0LGUpe2lmKCFvKXt2YXIgbj1pLmdldERhdGFzZXRNZXRhKGUpO2kuaXNEYXRhc2V0VmlzaWJsZShlKSYmcihuKSYmdm9pZCAwIT09bi5zdGFjayYmKG89ITApfX0pLGUuc3RhY2tlZHx8byl7dmFyIHM9e307dXQuZWFjaChuLGZ1bmN0aW9uKG4sYSl7dmFyIG89aS5nZXREYXRhc2V0TWV0YShhKSxsPVtvLnR5cGUsdm9pZCAwPT09ZS5zdGFja2VkJiZ2b2lkIDA9PT1vLnN0YWNrP2E6IiIsby5zdGFja10uam9pbigiLiIpO2kuaXNEYXRhc2V0VmlzaWJsZShhKSYmcihvKSYmKHZvaWQgMD09PXNbbF0mJihzW2xdPVtdKSx1dC5lYWNoKG4uZGF0YSxmdW5jdGlvbihlLGkpe3ZhciBuPXNbbF0sYT0rdC5nZXRSaWdodFZhbHVlKGUpO2lzTmFOKGEpfHxvLmRhdGFbaV0uaGlkZGVufHxhPDB8fChuW2ldPW5baV18fDAsbltpXSs9YSl9KSl9KSx1dC5lYWNoKHMsZnVuY3Rpb24oZSl7aWYoZS5sZW5ndGg+MCl7dmFyIGk9dXQubWluKGUpLG49dXQubWF4KGUpO3QubWluPW51bGw9PT10Lm1pbj9pOk1hdGgubWluKHQubWluLGkpLHQubWF4PW51bGw9PT10Lm1heD9uOk1hdGgubWF4KHQubWF4LG4pfX0pfWVsc2UgdXQuZWFjaChuLGZ1bmN0aW9uKGUsbil7dmFyIGE9aS5nZXREYXRhc2V0TWV0YShuKTtpLmlzRGF0YXNldFZpc2libGUobikmJnIoYSkmJnV0LmVhY2goZS5kYXRhLGZ1bmN0aW9uKGUsaSl7dmFyIG49K3QuZ2V0UmlnaHRWYWx1ZShlKTtpc05hTihuKXx8YS5kYXRhW2ldLmhpZGRlbnx8bjwwfHwobnVsbD09PXQubWluP3QubWluPW46bjx0Lm1pbiYmKHQubWluPW4pLG51bGw9PT10Lm1heD90Lm1heD1uOm4+dC5tYXgmJih0Lm1heD1uKSwwIT09biYmKG51bGw9PT10Lm1pbk5vdFplcm98fG48dC5taW5Ob3RaZXJvKSYmKHQubWluTm90WmVybz1uKSl9KX0pO3RoaXMuaGFuZGxlVGlja1JhbmdlT3B0aW9ucygpfSxoYW5kbGVUaWNrUmFuZ2VPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQub3B0aW9ucy50aWNrczt0Lm1pbj1NaShlLm1pbix0Lm1pbiksdC5tYXg9TWkoZS5tYXgsdC5tYXgpLHQubWluPT09dC5tYXgmJigwIT09dC5taW4mJm51bGwhPT10Lm1pbj8odC5taW49TWF0aC5wb3coMTAsTWF0aC5mbG9vcih1dC5sb2cxMCh0Lm1pbikpLTEpLHQubWF4PU1hdGgucG93KDEwLE1hdGguZmxvb3IodXQubG9nMTAodC5tYXgpKSsxKSk6KHQubWluPTEsdC5tYXg9MTApKSxudWxsPT09dC5taW4mJih0Lm1pbj1NYXRoLnBvdygxMCxNYXRoLmZsb29yKHV0LmxvZzEwKHQubWF4KSktMSkpLG51bGw9PT10Lm1heCYmKHQubWF4PTAhPT10Lm1pbj9NYXRoLnBvdygxMCxNYXRoLmZsb29yKHV0LmxvZzEwKHQubWluKSkrMSk6MTApLG51bGw9PT10Lm1pbk5vdFplcm8mJih0Lm1pbj4wP3QubWluTm90WmVybz10Lm1pbjp0Lm1heDwxP3QubWluTm90WmVybz1NYXRoLnBvdygxMCxNYXRoLmZsb29yKHV0LmxvZzEwKHQubWF4KSkpOnQubWluTm90WmVybz0xKX0sYnVpbGRUaWNrczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10Lm9wdGlvbnMudGlja3MsaT0hdC5pc0hvcml6b250YWwoKSxuPXttaW46TWkoZS5taW4pLG1heDpNaShlLm1heCl9LGE9dC50aWNrcz1mdW5jdGlvbih0LGUpe3ZhciBpLG4sYT1bXSxyPWtpKHQubWluLE1hdGgucG93KDEwLE1hdGguZmxvb3IodXQubG9nMTAoZS5taW4pKSkpLG89TWF0aC5mbG9vcih1dC5sb2cxMChlLm1heCkpLHM9TWF0aC5jZWlsKGUubWF4L01hdGgucG93KDEwLG8pKTswPT09cj8oaT1NYXRoLmZsb29yKHV0LmxvZzEwKGUubWluTm90WmVybykpLG49TWF0aC5mbG9vcihlLm1pbk5vdFplcm8vTWF0aC5wb3coMTAsaSkpLGEucHVzaChyKSxyPW4qTWF0aC5wb3coMTAsaSkpOihpPU1hdGguZmxvb3IodXQubG9nMTAocikpLG49TWF0aC5mbG9vcihyL01hdGgucG93KDEwLGkpKSk7dmFyIGw9aTwwP01hdGgucG93KDEwLE1hdGguYWJzKGkpKToxO2Rve2EucHVzaChyKSwxMD09KytuJiYobj0xLGw9KytpPj0wPzE6bCkscj1NYXRoLnJvdW5kKG4qTWF0aC5wb3coMTAsaSkqbCkvbH13aGlsZShpPG98fGk9PT1vJiZuPHMpO3ZhciB1PWtpKHQubWF4LHIpO3JldHVybiBhLnB1c2godSksYX0obix0KTt0Lm1heD11dC5tYXgoYSksdC5taW49dXQubWluKGEpLGUucmV2ZXJzZT8oaT0haSx0LnN0YXJ0PXQubWF4LHQuZW5kPXQubWluKToodC5zdGFydD10Lm1pbix0LmVuZD10Lm1heCksaSYmYS5yZXZlcnNlKCl9LGNvbnZlcnRUaWNrc1RvTGFiZWxzOmZ1bmN0aW9uKCl7dGhpcy50aWNrVmFsdWVzPXRoaXMudGlja3Muc2xpY2UoKSxmaS5wcm90b3R5cGUuY29udmVydFRpY2tzVG9MYWJlbHMuY2FsbCh0aGlzKX0sZ2V0TGFiZWxGb3JJbmRleDpmdW5jdGlvbih0LGUpe3JldHVybit0aGlzLmdldFJpZ2h0VmFsdWUodGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzW2VdLmRhdGFbdF0pfSxnZXRQaXhlbEZvclRpY2s6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZ2V0UGl4ZWxGb3JWYWx1ZSh0aGlzLnRpY2tWYWx1ZXNbdF0pfSxfZ2V0Rmlyc3RUaWNrVmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcih1dC5sb2cxMCh0KSk7cmV0dXJuIE1hdGguZmxvb3IodC9NYXRoLnBvdygxMCxlKSkqTWF0aC5wb3coMTAsZSl9LGdldFBpeGVsRm9yVmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUsaSxuLGEscixvPXRoaXMscz1vLm9wdGlvbnMudGlja3MsbD1zLnJldmVyc2UsdT11dC5sb2cxMCxkPW8uX2dldEZpcnN0VGlja1ZhbHVlKG8ubWluTm90WmVybyksaD0wO3JldHVybiB0PStvLmdldFJpZ2h0VmFsdWUodCksbD8obj1vLmVuZCxhPW8uc3RhcnQscj0tMSk6KG49by5zdGFydCxhPW8uZW5kLHI9MSksby5pc0hvcml6b250YWwoKT8oZT1vLndpZHRoLGk9bD9vLnJpZ2h0Om8ubGVmdCk6KGU9by5oZWlnaHQscio9LTEsaT1sP28udG9wOm8uYm90dG9tKSx0IT09biYmKDA9PT1uJiYoZS09aD1raShzLmZvbnRTaXplLG90Lmdsb2JhbC5kZWZhdWx0Rm9udFNpemUpLG49ZCksMCE9PXQmJihoKz1lLyh1KGEpLXUobikpKih1KHQpLXUobikpKSxpKz1yKmgpLGl9LGdldFZhbHVlRm9yUGl4ZWw6ZnVuY3Rpb24odCl7dmFyIGUsaSxuLGEscj10aGlzLG89ci5vcHRpb25zLnRpY2tzLHM9by5yZXZlcnNlLGw9dXQubG9nMTAsdT1yLl9nZXRGaXJzdFRpY2tWYWx1ZShyLm1pbk5vdFplcm8pO2lmKHM/KGk9ci5lbmQsbj1yLnN0YXJ0KTooaT1yLnN0YXJ0LG49ci5lbmQpLHIuaXNIb3Jpem9udGFsKCk/KGU9ci53aWR0aCxhPXM/ci5yaWdodC10OnQtci5sZWZ0KTooZT1yLmhlaWdodCxhPXM/dC1yLnRvcDpyLmJvdHRvbS10KSxhIT09aSl7aWYoMD09PWkpe3ZhciBkPWtpKG8uZm9udFNpemUsb3QuZ2xvYmFsLmRlZmF1bHRGb250U2l6ZSk7YS09ZCxlLT1kLGk9dX1hKj1sKG4pLWwoaSksYS89ZSxhPU1hdGgucG93KDEwLGwoaSkrYSl9cmV0dXJuIGF9fSksRGk9d2k7U2kuX2RlZmF1bHRzPURpO3ZhciBDaT11dC52YWx1ZU9yRGVmYXVsdCxQaT11dC52YWx1ZUF0SW5kZXhPckRlZmF1bHQsVGk9dXQub3B0aW9ucy5yZXNvbHZlLE9pPXtkaXNwbGF5OiEwLGFuaW1hdGU6ITAscG9zaXRpb246ImNoYXJ0QXJlYSIsYW5nbGVMaW5lczp7ZGlzcGxheTohMCxjb2xvcjoicmdiYSgwLCAwLCAwLCAwLjEpIixsaW5lV2lkdGg6MSxib3JkZXJEYXNoOltdLGJvcmRlckRhc2hPZmZzZXQ6MH0sZ3JpZExpbmVzOntjaXJjdWxhcjohMX0sdGlja3M6e3Nob3dMYWJlbEJhY2tkcm9wOiEwLGJhY2tkcm9wQ29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC43NSkiLGJhY2tkcm9wUGFkZGluZ1k6MixiYWNrZHJvcFBhZGRpbmdYOjIsY2FsbGJhY2s6bGkuZm9ybWF0dGVycy5saW5lYXJ9LHBvaW50TGFiZWxzOntkaXNwbGF5OiEwLGZvbnRTaXplOjEwLGNhbGxiYWNrOmZ1bmN0aW9uKHQpe3JldHVybiB0fX19O2Z1bmN0aW9uIElpKHQpe3ZhciBlPXQub3B0aW9ucztyZXR1cm4gZS5hbmdsZUxpbmVzLmRpc3BsYXl8fGUucG9pbnRMYWJlbHMuZGlzcGxheT90LmNoYXJ0LmRhdGEubGFiZWxzLmxlbmd0aDowfWZ1bmN0aW9uIEFpKHQpe3ZhciBlPXQudGlja3M7cmV0dXJuIGUuZGlzcGxheSYmdC5kaXNwbGF5P0NpKGUuZm9udFNpemUsb3QuZ2xvYmFsLmRlZmF1bHRGb250U2l6ZSkrMiplLmJhY2tkcm9wUGFkZGluZ1k6MH1mdW5jdGlvbiBGaSh0LGUsaSxuLGEpe3JldHVybiB0PT09bnx8dD09PWE/e3N0YXJ0OmUtaS8yLGVuZDplK2kvMn06dDxufHx0PmE/e3N0YXJ0OmUtaSxlbmQ6ZX06e3N0YXJ0OmUsZW5kOmUraX19ZnVuY3Rpb24gUmkodCl7cmV0dXJuIDA9PT10fHwxODA9PT10PyJjZW50ZXIiOnQ8MTgwPyJsZWZ0IjoicmlnaHQifWZ1bmN0aW9uIExpKHQsZSxpLG4pe3ZhciBhLHIsbz1pLnkrbi8yO2lmKHV0LmlzQXJyYXkoZSkpZm9yKGE9MCxyPWUubGVuZ3RoO2E8cjsrK2EpdC5maWxsVGV4dChlW2FdLGkueCxvKSxvKz1uO2Vsc2UgdC5maWxsVGV4dChlLGkueCxvKX1mdW5jdGlvbiBXaSh0LGUsaSl7OTA9PT10fHwyNzA9PT10P2kueS09ZS5oLzI6KHQ+MjcwfHx0PDkwKSYmKGkueS09ZS5oKX1mdW5jdGlvbiBZaSh0KXtyZXR1cm4gdXQuaXNOdW1iZXIodCk/dDowfXZhciBOaT15aS5leHRlbmQoe3NldERpbWVuc2lvbnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3Qud2lkdGg9dC5tYXhXaWR0aCx0LmhlaWdodD10Lm1heEhlaWdodCx0LnBhZGRpbmdUb3A9QWkodC5vcHRpb25zKS8yLHQueENlbnRlcj1NYXRoLmZsb29yKHQud2lkdGgvMiksdC55Q2VudGVyPU1hdGguZmxvb3IoKHQuaGVpZ2h0LXQucGFkZGluZ1RvcCkvMiksdC5kcmF3aW5nQXJlYT1NYXRoLm1pbih0LmhlaWdodC10LnBhZGRpbmdUb3AsdC53aWR0aCkvMn0sZGV0ZXJtaW5lRGF0YUxpbWl0czpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LmNoYXJ0LGk9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG49TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO3V0LmVhY2goZS5kYXRhLmRhdGFzZXRzLGZ1bmN0aW9uKGEscil7aWYoZS5pc0RhdGFzZXRWaXNpYmxlKHIpKXt2YXIgbz1lLmdldERhdGFzZXRNZXRhKHIpO3V0LmVhY2goYS5kYXRhLGZ1bmN0aW9uKGUsYSl7dmFyIHI9K3QuZ2V0UmlnaHRWYWx1ZShlKTtpc05hTihyKXx8by5kYXRhW2FdLmhpZGRlbnx8KGk9TWF0aC5taW4ocixpKSxuPU1hdGgubWF4KHIsbikpfSl9fSksdC5taW49aT09PU51bWJlci5QT1NJVElWRV9JTkZJTklUWT8wOmksdC5tYXg9bj09PU51bWJlci5ORUdBVElWRV9JTkZJTklUWT8wOm4sdC5oYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCl9LF9jb21wdXRlVGlja0xpbWl0OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmRyYXdpbmdBcmVhL0FpKHRoaXMub3B0aW9ucykpfSxjb252ZXJ0VGlja3NUb0xhYmVsczpmdW5jdGlvbigpe3ZhciB0PXRoaXM7eWkucHJvdG90eXBlLmNvbnZlcnRUaWNrc1RvTGFiZWxzLmNhbGwodCksdC5wb2ludExhYmVscz10LmNoYXJ0LmRhdGEubGFiZWxzLm1hcCh0Lm9wdGlvbnMucG9pbnRMYWJlbHMuY2FsbGJhY2ssdCl9LGdldExhYmVsRm9ySW5kZXg6ZnVuY3Rpb24odCxlKXtyZXR1cm4rdGhpcy5nZXRSaWdodFZhbHVlKHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1tlXS5kYXRhW3RdKX0sZml0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO3QuZGlzcGxheSYmdC5wb2ludExhYmVscy5kaXNwbGF5P2Z1bmN0aW9uKHQpe3ZhciBlLGksbixhPXV0Lm9wdGlvbnMuX3BhcnNlRm9udCh0Lm9wdGlvbnMucG9pbnRMYWJlbHMpLHI9e2w6MCxyOnQud2lkdGgsdDowLGI6dC5oZWlnaHQtdC5wYWRkaW5nVG9wfSxvPXt9O3QuY3R4LmZvbnQ9YS5zdHJpbmcsdC5fcG9pbnRMYWJlbFNpemVzPVtdO3ZhciBzLGwsdSxkPUlpKHQpO2ZvcihlPTA7ZTxkO2UrKyl7bj10LmdldFBvaW50UG9zaXRpb24oZSx0LmRyYXdpbmdBcmVhKzUpLHM9dC5jdHgsbD1hLmxpbmVIZWlnaHQsdT10LnBvaW50TGFiZWxzW2VdfHwiIixpPXV0LmlzQXJyYXkodSk/e3c6dXQubG9uZ2VzdFRleHQocyxzLmZvbnQsdSksaDp1Lmxlbmd0aCpsfTp7dzpzLm1lYXN1cmVUZXh0KHUpLndpZHRoLGg6bH0sdC5fcG9pbnRMYWJlbFNpemVzW2VdPWk7dmFyIGg9dC5nZXRJbmRleEFuZ2xlKGUpLGM9dXQudG9EZWdyZWVzKGgpJTM2MCxmPUZpKGMsbi54LGkudywwLDE4MCksZz1GaShjLG4ueSxpLmgsOTAsMjcwKTtmLnN0YXJ0PHIubCYmKHIubD1mLnN0YXJ0LG8ubD1oKSxmLmVuZD5yLnImJihyLnI9Zi5lbmQsby5yPWgpLGcuc3RhcnQ8ci50JiYoci50PWcuc3RhcnQsby50PWgpLGcuZW5kPnIuYiYmKHIuYj1nLmVuZCxvLmI9aCl9dC5zZXRSZWR1Y3Rpb25zKHQuZHJhd2luZ0FyZWEscixvKX0odGhpcyk6dGhpcy5zZXRDZW50ZXJQb2ludCgwLDAsMCwwKX0sc2V0UmVkdWN0aW9uczpmdW5jdGlvbih0LGUsaSl7dmFyIG49dGhpcyxhPWUubC9NYXRoLnNpbihpLmwpLHI9TWF0aC5tYXgoZS5yLW4ud2lkdGgsMCkvTWF0aC5zaW4oaS5yKSxvPS1lLnQvTWF0aC5jb3MoaS50KSxzPS1NYXRoLm1heChlLmItKG4uaGVpZ2h0LW4ucGFkZGluZ1RvcCksMCkvTWF0aC5jb3MoaS5iKTthPVlpKGEpLHI9WWkociksbz1ZaShvKSxzPVlpKHMpLG4uZHJhd2luZ0FyZWE9TWF0aC5taW4oTWF0aC5mbG9vcih0LShhK3IpLzIpLE1hdGguZmxvb3IodC0obytzKS8yKSksbi5zZXRDZW50ZXJQb2ludChhLHIsbyxzKX0sc2V0Q2VudGVyUG9pbnQ6ZnVuY3Rpb24odCxlLGksbil7dmFyIGE9dGhpcyxyPWEud2lkdGgtZS1hLmRyYXdpbmdBcmVhLG89dCthLmRyYXdpbmdBcmVhLHM9aSthLmRyYXdpbmdBcmVhLGw9YS5oZWlnaHQtYS5wYWRkaW5nVG9wLW4tYS5kcmF3aW5nQXJlYTthLnhDZW50ZXI9TWF0aC5mbG9vcigobytyKS8yK2EubGVmdCksYS55Q2VudGVyPU1hdGguZmxvb3IoKHMrbCkvMithLnRvcCthLnBhZGRpbmdUb3ApfSxnZXRJbmRleEFuZ2xlOmZ1bmN0aW9uKHQpe3JldHVybiB0KigyKk1hdGguUEkvSWkodGhpcykpKyh0aGlzLmNoYXJ0Lm9wdGlvbnMmJnRoaXMuY2hhcnQub3B0aW9ucy5zdGFydEFuZ2xlP3RoaXMuY2hhcnQub3B0aW9ucy5zdGFydEFuZ2xlOjApKk1hdGguUEkqMi8zNjB9LGdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYobnVsbD09PXQpcmV0dXJuIDA7dmFyIGk9ZS5kcmF3aW5nQXJlYS8oZS5tYXgtZS5taW4pO3JldHVybiBlLm9wdGlvbnMudGlja3MucmV2ZXJzZT8oZS5tYXgtdCkqaToodC1lLm1pbikqaX0sZ2V0UG9pbnRQb3NpdGlvbjpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuZ2V0SW5kZXhBbmdsZSh0KS1NYXRoLlBJLzI7cmV0dXJue3g6TWF0aC5jb3MoaSkqZSt0aGlzLnhDZW50ZXIseTpNYXRoLnNpbihpKSplK3RoaXMueUNlbnRlcn19LGdldFBvaW50UG9zaXRpb25Gb3JWYWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldFBvaW50UG9zaXRpb24odCx0aGlzLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKGUpKX0sZ2V0QmFzZVBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5taW4sZT10aGlzLm1heDtyZXR1cm4gdGhpcy5nZXRQb2ludFBvc2l0aW9uRm9yVmFsdWUoMCx0aGlzLmJlZ2luQXRaZXJvPzA6dDwwJiZlPDA/ZTp0PjAmJmU+MD90OjApfSxkcmF3OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQub3B0aW9ucyxpPWUuZ3JpZExpbmVzLG49ZS50aWNrcztpZihlLmRpc3BsYXkpe3ZhciBhPXQuY3R4LHI9dGhpcy5nZXRJbmRleEFuZ2xlKDApLG89dXQub3B0aW9ucy5fcGFyc2VGb250KG4pOyhlLmFuZ2xlTGluZXMuZGlzcGxheXx8ZS5wb2ludExhYmVscy5kaXNwbGF5KSYmZnVuY3Rpb24odCl7dmFyIGU9dC5jdHgsaT10Lm9wdGlvbnMsbj1pLmFuZ2xlTGluZXMsYT1pLmdyaWRMaW5lcyxyPWkucG9pbnRMYWJlbHMsbz1DaShuLmxpbmVXaWR0aCxhLmxpbmVXaWR0aCkscz1DaShuLmNvbG9yLGEuY29sb3IpLGw9QWkoaSk7ZS5zYXZlKCksZS5saW5lV2lkdGg9byxlLnN0cm9rZVN0eWxlPXMsZS5zZXRMaW5lRGFzaCYmKGUuc2V0TGluZURhc2goVGkoW24uYm9yZGVyRGFzaCxhLmJvcmRlckRhc2gsW11dKSksZS5saW5lRGFzaE9mZnNldD1UaShbbi5ib3JkZXJEYXNoT2Zmc2V0LGEuYm9yZGVyRGFzaE9mZnNldCwwXSkpO3ZhciB1PXQuZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUoaS50aWNrcy5yZXZlcnNlP3QubWluOnQubWF4KSxkPXV0Lm9wdGlvbnMuX3BhcnNlRm9udChyKTtlLmZvbnQ9ZC5zdHJpbmcsZS50ZXh0QmFzZWxpbmU9Im1pZGRsZSI7Zm9yKHZhciBoPUlpKHQpLTE7aD49MDtoLS0pe2lmKG4uZGlzcGxheSYmbyYmcyl7dmFyIGM9dC5nZXRQb2ludFBvc2l0aW9uKGgsdSk7ZS5iZWdpblBhdGgoKSxlLm1vdmVUbyh0LnhDZW50ZXIsdC55Q2VudGVyKSxlLmxpbmVUbyhjLngsYy55KSxlLnN0cm9rZSgpfWlmKHIuZGlzcGxheSl7dmFyIGY9MD09PWg/bC8yOjAsZz10LmdldFBvaW50UG9zaXRpb24oaCx1K2YrNSksbT1QaShyLmZvbnRDb2xvcixoLG90Lmdsb2JhbC5kZWZhdWx0Rm9udENvbG9yKTtlLmZpbGxTdHlsZT1tO3ZhciBwPXQuZ2V0SW5kZXhBbmdsZShoKSx2PXV0LnRvRGVncmVlcyhwKTtlLnRleHRBbGlnbj1SaSh2KSxXaSh2LHQuX3BvaW50TGFiZWxTaXplc1toXSxnKSxMaShlLHQucG9pbnRMYWJlbHNbaF18fCIiLGcsZC5saW5lSGVpZ2h0KX19ZS5yZXN0b3JlKCl9KHQpLHV0LmVhY2godC50aWNrcyxmdW5jdGlvbihlLHMpe2lmKHM+MHx8bi5yZXZlcnNlKXt2YXIgbD10LmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKHQudGlja3NBc051bWJlcnNbc10pO2lmKGkuZGlzcGxheSYmMCE9PXMmJmZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBhLHI9dC5jdHgsbz1lLmNpcmN1bGFyLHM9SWkodCksbD1QaShlLmNvbG9yLG4tMSksdT1QaShlLmxpbmVXaWR0aCxuLTEpO2lmKChvfHxzKSYmbCYmdSl7aWYoci5zYXZlKCksci5zdHJva2VTdHlsZT1sLHIubGluZVdpZHRoPXUsci5zZXRMaW5lRGFzaCYmKHIuc2V0TGluZURhc2goZS5ib3JkZXJEYXNofHxbXSksci5saW5lRGFzaE9mZnNldD1lLmJvcmRlckRhc2hPZmZzZXR8fDApLHIuYmVnaW5QYXRoKCksbylyLmFyYyh0LnhDZW50ZXIsdC55Q2VudGVyLGksMCwyKk1hdGguUEkpO2Vsc2V7YT10LmdldFBvaW50UG9zaXRpb24oMCxpKSxyLm1vdmVUbyhhLngsYS55KTtmb3IodmFyIGQ9MTtkPHM7ZCsrKWE9dC5nZXRQb2ludFBvc2l0aW9uKGQsaSksci5saW5lVG8oYS54LGEueSl9ci5jbG9zZVBhdGgoKSxyLnN0cm9rZSgpLHIucmVzdG9yZSgpfX0odCxpLGwscyksbi5kaXNwbGF5KXt2YXIgdT1DaShuLmZvbnRDb2xvcixvdC5nbG9iYWwuZGVmYXVsdEZvbnRDb2xvcik7aWYoYS5mb250PW8uc3RyaW5nLGEuc2F2ZSgpLGEudHJhbnNsYXRlKHQueENlbnRlcix0LnlDZW50ZXIpLGEucm90YXRlKHIpLG4uc2hvd0xhYmVsQmFja2Ryb3Ape3ZhciBkPWEubWVhc3VyZQ=="
}

Changelog:

{
    "2019.12.27 20:26": "base64:LGgucHVzaChpKTtyZXR1cm4gaH0sX3RpY2tTaXplOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQuaXNIb3Jpem9udGFsKCksaT10Lm9wdGlvbnMudGlja3MubWlub3Isbj11dC50b1JhZGlhbnModC5sYWJlbFJvdGF0aW9uKSxhPU1hdGguYWJzKE1hdGguY29zKG4pKSxyPU1hdGguYWJzKE1hdGguc2luKG4pKSxvPWkuYXV0b1NraXBQYWRkaW5nfHwwLHM9dC5sb25nZXN0TGFiZWxXaWR0aCtvfHwwLGw9dXQub3B0aW9ucy5fcGFyc2VGb250KGkpLHU9dC5fbWF4TGFiZWxMaW5lcypsLmxpbmVIZWlnaHQrb3x8MDtyZXR1cm4gZT91KmE+cypyP3MvYTp1L3I6dSpyPHMqYT91L2E6cy9yfSxfaXNWaXNpYmxlOmZ1bmN0aW9uKCl7dmFyIHQsZSxpLG49dGhpcy5jaGFydCxhPXRoaXMub3B0aW9ucy5kaXNwbGF5O2lmKCJhdXRvIiE9PWEpcmV0dXJuISFhO2Zvcih0PTAsZT1uLmRhdGEuZGF0YXNldHMubGVuZ3RoO3Q8ZTsrK3QpaWYobi5pc0RhdGFzZXRWaXNpYmxlKHQpJiYoKGk9bi5nZXREYXRhc2V0TWV0YSh0KSkueEF4aXNJRD09PXRoaXMuaWR8fGkueUF4aXNJRD09PXRoaXMuaWQpKXJldHVybiEwO3JldHVybiExfSxkcmF3OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT1lLm9wdGlvbnM7aWYoZS5faXNWaXNpYmxlKCkpe3ZhciBuLGEscixvPWUuY2hhcnQscz1lLmN0eCxsPW90Lmdsb2JhbC5kZWZhdWx0Rm9udENvbG9yLHU9aS50aWNrcy5taW5vcixkPWkudGlja3MubWFqb3J8fHUsaD1pLmdyaWRMaW5lcyxjPWkuc2NhbGVMYWJlbCxmPWkucG9zaXRpb24sZz0wIT09ZS5sYWJlbFJvdGF0aW9uLG09dS5taXJyb3IscD1lLmlzSG9yaXpvbnRhbCgpLHY9dXQub3B0aW9ucy5fcGFyc2VGb250LHk9dS5kaXNwbGF5JiZ1LmF1dG9Ta2lwP2UuX2F1dG9Ta2lwKGUuZ2V0VGlja3MoKSk6ZS5nZXRUaWNrcygpLGI9dWkodS5mb250Q29sb3IsbCkseD12KHUpLF89eC5saW5lSGVpZ2h0LGs9dWkoZC5mb250Q29sb3IsbCksdz12KGQpLE09dS5wYWRkaW5nLFM9dS5sYWJlbE9mZnNldCxEPWguZHJhd1RpY2tzP2gudGlja01hcmtMZW5ndGg6MCxDPXVpKGMuZm9udENvbG9yLGwpLFA9dihjKSxUPXV0Lm9wdGlvbnMudG9QYWRkaW5nKGMucGFkZGluZyksTz11dC50b1JhZGlhbnMoZS5sYWJlbFJvdGF0aW9uKSxJPVtdLEE9aC5kcmF3Qm9yZGVyP2RpKGgubGluZVdpZHRoLDAsMCk6MCxGPXV0Ll9hbGlnblBpeGVsOyJ0b3AiPT09Zj8obj1GKG8sZS5ib3R0b20sQSksYT1lLmJvdHRvbS1ELHI9bi1BLzIpOiJib3R0b20iPT09Zj8obj1GKG8sZS50b3AsQSksYT1uK0EvMixyPWUudG9wK0QpOiJsZWZ0Ij09PWY/KG49RihvLGUucmlnaHQsQSksYT1lLnJpZ2h0LUQscj1uLUEvMik6KG49RihvLGUubGVmdCxBKSxhPW4rQS8yLHI9ZS5sZWZ0K0QpO2lmKHV0LmVhY2goeSxmdW5jdGlvbihuLHMpe2lmKCF1dC5pc051bGxPclVuZGVmKG4ubGFiZWwpKXt2YXIgbCx1LGQsYyx2LHksYix4LGssdyxDLFAsVCxSLEwsVyxZPW4ubGFiZWw7cz09PWUuemVyb0xpbmVJbmRleCYmaS5vZmZzZXQ9PT1oLm9mZnNldEdyaWRMaW5lcz8obD1oLnplcm9MaW5lV2lkdGgsdT1oLnplcm9MaW5lQ29sb3IsZD1oLnplcm9MaW5lQm9yZGVyRGFzaHx8W10sYz1oLnplcm9MaW5lQm9yZGVyRGFzaE9mZnNldHx8MCk6KGw9ZGkoaC5saW5lV2lkdGgscyksdT1kaShoLmNvbG9yLHMpLGQ9aC5ib3JkZXJEYXNofHxbXSxjPWguYm9yZGVyRGFzaE9mZnNldHx8MCk7dmFyIE49dXQuaXNBcnJheShZKT9ZLmxlbmd0aDoxLHo9ZnVuY3Rpb24odCxlLGkpe3ZhciBuPXQuZ2V0UGl4ZWxGb3JUaWNrKGUpO3JldHVybiBpJiYoMT09PXQuZ2V0VGlja3MoKS5sZW5ndGg/bi09dC5pc0hvcml6b250YWwoKT9NYXRoLm1heChuLXQubGVmdCx0LnJpZ2h0LW4pOk1hdGgubWF4KG4tdC50b3AsdC5ib3R0b20tbik6bi09MD09PWU/KHQuZ2V0UGl4ZWxGb3JUaWNrKDEpLW4pLzI6KG4tdC5nZXRQaXhlbEZvclRpY2soZS0xKSkvMiksbn0oZSxzLGgub2Zmc2V0R3JpZExpbmVzKTtpZihwKXt2YXIgVj1EK007ejxlLmxlZnQtMWUtNyYmKHU9InJnYmEoMCwwLDAsMCkiKSx2PWI9az1DPUYobyx6LGwpLHk9YSx4PXIsVD1lLmdldFBpeGVsRm9yVGljayhzKStTLCJ0b3AiPT09Zj8odz1GKG8sdC50b3AsQSkrQS8yLFA9dC5ib3R0b20sTD0oKGc/MTouNSktTikqXyxXPWc/ImxlZnQiOiJjZW50ZXIiLFI9ZS5ib3R0b20tVik6KHc9dC50b3AsUD1GKG8sdC5ib3R0b20sQSktQS8yLEw9KGc/MDouNSkqXyxXPWc/InJpZ2h0IjoiY2VudGVyIixSPWUudG9wK1YpfWVsc2V7dmFyIEg9KG0/MDpEKStNO3o8ZS50b3AtMWUtNyYmKHU9InJnYmEoMCwwLDAsMCkiKSx2PWEsYj1yLHk9eD13PVA9RihvLHosbCksUj1lLmdldFBpeGVsRm9yVGljayhzKStTLEw9KDEtTikqXy8yLCJsZWZ0Ij09PWY/KGs9RihvLHQubGVmdCxBKStBLzIsQz10LnJpZ2h0LFc9bT8ibGVmdCI6InJpZ2h0IixUPWUucmlnaHQtSCk6KGs9dC5sZWZ0LEM9RihvLHQucmlnaHQsQSktQS8yLFc9bT8icmlnaHQiOiJsZWZ0IixUPWUubGVmdCtIKX1JLnB1c2goe3R4MTp2LHR5MTp5LHR4MjpiLHR5Mjp4LHgxOmsseTE6dyx4MjpDLHkyOlAsbGFiZWxYOlQsbGFiZWxZOlIsZ2xXaWR0aDpsLGdsQ29sb3I6dSxnbEJvcmRlckRhc2g6ZCxnbEJvcmRlckRhc2hPZmZzZXQ6Yyxyb3RhdGlvbjotMSpPLGxhYmVsOlksbWFqb3I6bi5tYWpvcix0ZXh0T2Zmc2V0OkwsdGV4dEFsaWduOld9KX19KSx1dC5lYWNoKEksZnVuY3Rpb24odCl7dmFyIGU9dC5nbFdpZHRoLGk9dC5nbENvbG9yO2lmKGguZGlzcGxheSYmZSYmaSYmKHMuc2F2ZSgpLHMubGluZVdpZHRoPWUscy5zdHJva2VTdHlsZT1pLHMuc2V0TGluZURhc2gmJihzLnNldExpbmVEYXNoKHQuZ2xCb3JkZXJEYXNoKSxzLmxpbmVEYXNoT2Zmc2V0PXQuZ2xCb3JkZXJEYXNoT2Zmc2V0KSxzLmJlZ2luUGF0aCgpLGguZHJhd1RpY2tzJiYocy5tb3ZlVG8odC50eDEsdC50eTEpLHMubGluZVRvKHQudHgyLHQudHkyKSksaC5kcmF3T25DaGFydEFyZWEmJihzLm1vdmVUbyh0LngxLHQueTEpLHMubGluZVRvKHQueDIsdC55MikpLHMuc3Ryb2tlKCkscy5yZXN0b3JlKCkpLHUuZGlzcGxheSl7cy5zYXZlKCkscy50cmFuc2xhdGUodC5sYWJlbFgsdC5sYWJlbFkpLHMucm90YXRlKHQucm90YXRpb24pLHMuZm9udD10Lm1ham9yP3cuc3RyaW5nOnguc3RyaW5nLHMuZmlsbFN0eWxlPXQubWFqb3I/azpiLHMudGV4dEJhc2VsaW5lPSJtaWRkbGUiLHMudGV4dEFsaWduPXQudGV4dEFsaWduO3ZhciBuPXQubGFiZWwsYT10LnRleHRPZmZzZXQ7aWYodXQuaXNBcnJheShuKSlmb3IodmFyIHI9MDtyPG4ubGVuZ3RoOysrcilzLmZpbGxUZXh0KCIiK25bcl0sMCxhKSxhKz1fO2Vsc2Ugcy5maWxsVGV4dChuLDAsYSk7cy5yZXN0b3JlKCl9fSksYy5kaXNwbGF5KXt2YXIgUixMLFc9MCxZPVAubGluZUhlaWdodC8yO2lmKHApUj1lLmxlZnQrKGUucmlnaHQtZS5sZWZ0KS8yLEw9ImJvdHRvbSI9PT1mP2UuYm90dG9tLVktVC5ib3R0b206ZS50b3ArWStULnRvcDtlbHNle3ZhciBOPSJsZWZ0Ij09PWY7Uj1OP2UubGVmdCtZK1QudG9wOmUucmlnaHQtWS1ULnRvcCxMPWUudG9wKyhlLmJvdHRvbS1lLnRvcCkvMixXPU4/LS41Kk1hdGguUEk6LjUqTWF0aC5QSX1zLnNhdmUoKSxzLnRyYW5zbGF0ZShSLEwpLHMucm90YXRlKFcpLHMudGV4dEFsaWduPSJjZW50ZXIiLHMudGV4dEJhc2VsaW5lPSJtaWRkbGUiLHMuZmlsbFN0eWxlPUMscy5mb250PVAuc3RyaW5nLHMuZmlsbFRleHQoYy5sYWJlbFN0cmluZywwLDApLHMucmVzdG9yZSgpfWlmKEEpe3ZhciB6LFYsSCxFLEI9QSxqPWRpKGgubGluZVdpZHRoLHkubGVuZ3RoLTEsMCk7cD8oej1GKG8sZS5sZWZ0LEIpLUIvMixWPUYobyxlLnJpZ2h0LGopK2ovMixIPUU9bik6KEg9RihvLGUudG9wLEIpLUIvMixFPUYobyxlLmJvdHRvbSxqKStqLzIsej1WPW4pLHMubGluZVdpZHRoPUEscy5zdHJva2VTdHlsZT1kaShoLmNvbG9yLDApLHMuYmVnaW5QYXRoKCkscy5tb3ZlVG8oeixIKSxzLmxpbmVUbyhWLEUpLHMuc3Ryb2tlKCl9fX19KSxnaT1maS5leHRlbmQoe2dldExhYmVsczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY2hhcnQuZGF0YTtyZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsc3x8KHRoaXMuaXNIb3Jpem9udGFsKCk/dC54TGFiZWxzOnQueUxhYmVscyl8fHQubGFiZWxzfSxkZXRlcm1pbmVEYXRhTGltaXRzOmZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLGk9ZS5nZXRMYWJlbHMoKTtlLm1pbkluZGV4PTAsZS5tYXhJbmRleD1pLmxlbmd0aC0xLHZvaWQgMCE9PWUub3B0aW9ucy50aWNrcy5taW4mJih0PWkuaW5kZXhPZihlLm9wdGlvbnMudGlja3MubWluKSxlLm1pbkluZGV4PS0xIT09dD90OmUubWluSW5kZXgpLHZvaWQgMCE9PWUub3B0aW9ucy50aWNrcy5tYXgmJih0PWkuaW5kZXhPZihlLm9wdGlvbnMudGlja3MubWF4KSxlLm1heEluZGV4PS0xIT09dD90OmUubWF4SW5kZXgpLGUubWluPWlbZS5taW5JbmRleF0sZS5tYXg9aVtlLm1heEluZGV4XX0sYnVpbGRUaWNrczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LmdldExhYmVscygpO3QudGlja3M9MD09PXQubWluSW5kZXgmJnQubWF4SW5kZXg9PT1lLmxlbmd0aC0xP2U6ZS5zbGljZSh0Lm1pbkluZGV4LHQubWF4SW5kZXgrMSl9LGdldExhYmVsRm9ySW5kZXg6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLG49aS5jaGFydDtyZXR1cm4gbi5nZXREYXRhc2V0TWV0YShlKS5jb250cm9sbGVyLl9nZXRWYWx1ZVNjYWxlSWQoKT09PWkuaWQ/aS5nZXRSaWdodFZhbHVlKG4uZGF0YS5kYXRhc2V0c1tlXS5kYXRhW3RdKTppLnRpY2tzW3QtaS5taW5JbmRleF19LGdldFBpeGVsRm9yVmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaSxuPXRoaXMsYT1uLm9wdGlvbnMub2Zmc2V0LHI9TWF0aC5tYXgobi5tYXhJbmRleCsxLW4ubWluSW5kZXgtKGE/MDoxKSwxKTtpZihudWxsIT10JiYoaT1uLmlzSG9yaXpvbnRhbCgpP3QueDp0LnkpLHZvaWQgMCE9PWl8fHZvaWQgMCE9PXQmJmlzTmFOKGUpKXt0PWl8fHQ7dmFyIG89bi5nZXRMYWJlbHMoKS5pbmRleE9mKHQpO2U9LTEhPT1vP286ZX1pZihuLmlzSG9yaXpvbnRhbCgpKXt2YXIgcz1uLndpZHRoL3IsbD1zKihlLW4ubWluSW5kZXgpO3JldHVybiBhJiYobCs9cy8yKSxuLmxlZnQrbH12YXIgdT1uLmhlaWdodC9yLGQ9dSooZS1uLm1pbkluZGV4KTtyZXR1cm4gYSYmKGQrPXUvMiksbi50b3ArZH0sZ2V0UGl4ZWxGb3JUaWNrOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFBpeGVsRm9yVmFsdWUodGhpcy50aWNrc1t0XSx0K3RoaXMubWluSW5kZXgsbnVsbCl9LGdldFZhbHVlRm9yUGl4ZWw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPWUub3B0aW9ucy5vZmZzZXQsbj1NYXRoLm1heChlLl90aWNrcy5sZW5ndGgtKGk/MDoxKSwxKSxhPWUuaXNIb3Jpem9udGFsKCkscj0oYT9lLndpZHRoOmUuaGVpZ2h0KS9uO3JldHVybiB0LT1hP2UubGVmdDplLnRvcCxpJiYodC09ci8yKSwodDw9MD8wOk1hdGgucm91bmQodC9yKSkrZS5taW5JbmRleH0sZ2V0QmFzZVBpeGVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYm90dG9tfX0pLG1pPXtwb3NpdGlvbjoiYm90dG9tIn07Z2kuX2RlZmF1bHRzPW1pO3ZhciBwaT11dC5ub29wLHZpPXV0LmlzTnVsbE9yVW5kZWY7dmFyIHlpPWZpLmV4dGVuZCh7Z2V0UmlnaHRWYWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/K3Q6ZmkucHJvdG90eXBlLmdldFJpZ2h0VmFsdWUuY2FsbCh0aGlzLHQpfSxoYW5kbGVUaWNrUmFuZ2VPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQub3B0aW9ucy50aWNrcztpZihlLmJlZ2luQXRaZXJvKXt2YXIgaT11dC5zaWduKHQubWluKSxuPXV0LnNpZ24odC5tYXgpO2k8MCYmbjwwP3QubWF4PTA6aT4wJiZuPjAmJih0Lm1pbj0wKX12YXIgYT12b2lkIDAhPT1lLm1pbnx8dm9pZCAwIT09ZS5zdWdnZXN0ZWRNaW4scj12b2lkIDAhPT1lLm1heHx8dm9pZCAwIT09ZS5zdWdnZXN0ZWRNYXg7dm9pZCAwIT09ZS5taW4/dC5taW49ZS5taW46dm9pZCAwIT09ZS5zdWdnZXN0ZWRNaW4mJihudWxsPT09dC5taW4/dC5taW49ZS5zdWdnZXN0ZWRNaW46dC5taW49TWF0aC5taW4odC5taW4sZS5zdWdnZXN0ZWRNaW4pKSx2b2lkIDAhPT1lLm1heD90Lm1heD1lLm1heDp2b2lkIDAhPT1lLnN1Z2dlc3RlZE1heCYmKG51bGw9PT10Lm1heD90Lm1heD1lLnN1Z2dlc3RlZE1heDp0Lm1heD1NYXRoLm1heCh0Lm1heCxlLnN1Z2dlc3RlZE1heCkpLGEhPT1yJiZ0Lm1pbj49dC5tYXgmJihhP3QubWF4PXQubWluKzE6dC5taW49dC5tYXgtMSksdC5taW49PT10Lm1heCYmKHQubWF4KyssZS5iZWdpbkF0WmVyb3x8dC5taW4tLSl9LGdldFRpY2tMaW1pdDpmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5vcHRpb25zLnRpY2tzLGk9ZS5zdGVwU2l6ZSxuPWUubWF4VGlja3NMaW1pdDtyZXR1cm4gaT90PU1hdGguY2VpbCh0aGlzLm1heC9pKS1NYXRoLmZsb29yKHRoaXMubWluL2kpKzE6KHQ9dGhpcy5fY29tcHV0ZVRpY2tMaW1pdCgpLG49bnx8MTEpLG4mJih0PU1hdGgubWluKG4sdCkpLHR9LF9jb21wdXRlVGlja0xpbWl0OmZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5QT1NJVElWRV9JTkZJTklUWX0saGFuZGxlRGlyZWN0aW9uYWxDaGFuZ2VzOnBpLGJ1aWxkVGlja3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5vcHRpb25zLnRpY2tzLGk9dC5nZXRUaWNrTGltaXQoKSxuPXttYXhUaWNrczppPU1hdGgubWF4KDIsaSksbWluOmUubWluLG1heDplLm1heCxwcmVjaXNpb246ZS5wcmVjaXNpb24sc3RlcFNpemU6dXQudmFsdWVPckRlZmF1bHQoZS5maXhlZFN0ZXBTaXplLGUuc3RlcFNpemUpfSxhPXQudGlja3M9ZnVuY3Rpb24odCxlKXt2YXIgaSxuLGEscixvPVtdLHM9dC5zdGVwU2l6ZSxsPXN8fDEsdT10Lm1heFRpY2tzLTEsZD10Lm1pbixoPXQubWF4LGM9dC5wcmVjaXNpb24sZj1lLm1pbixnPWUubWF4LG09dXQubmljZU51bSgoZy1mKS91L2wpKmw7aWYobTwxZS0xNCYmdmkoZCkmJnZpKGgpKXJldHVybltmLGddOyhyPU1hdGguY2VpbChnL20pLU1hdGguZmxvb3IoZi9tKSk+dSYmKG09dXQubmljZU51bShyKm0vdS9sKSpsKSxzfHx2aShjKT9pPU1hdGgucG93KDEwLHV0Ll9kZWNpbWFsUGxhY2VzKG0pKTooaT1NYXRoLnBvdygxMCxjKSxtPU1hdGguY2VpbChtKmkpL2kpLG49TWF0aC5mbG9vcihmL20pKm0sYT1NYXRoLmNlaWwoZy9tKSptLHMmJighdmkoZCkmJnV0LmFsbW9zdFdob2xlKGQvbSxtLzFlMykmJihuPWQpLCF2aShoKSYmdXQuYWxtb3N0V2hvbGUoaC9tLG0vMWUzKSYmKGE9aCkpLHI9KGEtbikvbSxyPXV0LmFsbW9zdEVxdWFscyhyLE1hdGgucm91bmQociksbS8xZTMpP01hdGgucm91bmQocik6TWF0aC5jZWlsKHIpLG49TWF0aC5yb3VuZChuKmkpL2ksYT1NYXRoLnJvdW5kKGEqaSkvaSxvLnB1c2godmkoZCk/bjpkKTtmb3IodmFyIHA9MTtwPHI7KytwKW8ucHVzaChNYXRoLnJvdW5kKChuK3AqbSkqaSkvaSk7cmV0dXJuIG8ucHVzaCh2aShoKT9hOmgpLG99KG4sdCk7dC5oYW5kbGVEaXJlY3Rpb25hbENoYW5nZXMoKSx0Lm1heD11dC5tYXgoYSksdC5taW49dXQubWluKGEpLGUucmV2ZXJzZT8oYS5yZXZlcnNlKCksdC5zdGFydD10Lm1heCx0LmVuZD10Lm1pbik6KHQuc3RhcnQ9dC5taW4sdC5lbmQ9dC5tYXgpfSxjb252ZXJ0VGlja3NUb0xhYmVsczpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dC50aWNrc0FzTnVtYmVycz10LnRpY2tzLnNsaWNlKCksdC56ZXJvTGluZUluZGV4PXQudGlja3MuaW5kZXhPZigwKSxmaS5wcm90b3R5cGUuY29udmVydFRpY2tzVG9MYWJlbHMuY2FsbCh0KX19KSxiaT17cG9zaXRpb246ImxlZnQiLHRpY2tzOntjYWxsYmFjazpsaS5mb3JtYXR0ZXJzLmxpbmVhcn19LHhpPXlpLmV4dGVuZCh7ZGV0ZXJtaW5lRGF0YUxpbWl0czpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10Lm9wdGlvbnMsaT10LmNoYXJ0LG49aS5kYXRhLmRhdGFzZXRzLGE9dC5pc0hvcml6b250YWwoKTtmdW5jdGlvbiByKGUpe3JldHVybiBhP2UueEF4aXNJRD09PXQuaWQ6ZS55QXhpc0lEPT09dC5pZH10Lm1pbj1udWxsLHQubWF4PW51bGw7dmFyIG89ZS5zdGFja2VkO2lmKHZvaWQgMD09PW8mJnV0LmVhY2gobixmdW5jdGlvbih0LGUpe2lmKCFvKXt2YXIgbj1pLmdldERhdGFzZXRNZXRhKGUpO2kuaXNEYXRhc2V0VmlzaWJsZShlKSYmcihuKSYmdm9pZCAwIT09bi5zdGFjayYmKG89ITApfX0pLGUuc3RhY2tlZHx8byl7dmFyIHM9e307dXQuZWFjaChuLGZ1bmN0aW9uKG4sYSl7dmFyIG89aS5nZXREYXRhc2V0TWV0YShhKSxsPVtvLnR5cGUsdm9pZCAwPT09ZS5zdGFja2VkJiZ2b2lkIDA9PT1vLnN0YWNrP2E6IiIsby5zdGFja10uam9pbigiLiIpO3ZvaWQgMD09PXNbbF0mJihzW2xdPXtwb3NpdGl2ZVZhbHVlczpbXSxuZWdhdGl2ZVZhbHVlczpbXX0pO3ZhciB1PXNbbF0ucG9zaXRpdmVWYWx1ZXMsZD1zW2xdLm5lZ2F0aXZlVmFsdWVzO2kuaXNEYXRhc2V0VmlzaWJsZShhKSYmcihvKSYmdXQuZWFjaChuLmRhdGEsZnVuY3Rpb24oaSxuKXt2YXIgYT0rdC5nZXRSaWdodFZhbHVlKGkpO2lzTmFOKGEpfHxvLmRhdGFbbl0uaGlkZGVufHwodVtuXT11W25dfHwwLGRbbl09ZFtuXXx8MCxlLnJlbGF0aXZlUG9pbnRzP3Vbbl09MTAwOmE8MD9kW25dKz1hOnVbbl0rPWEpfSl9KSx1dC5lYWNoKHMsZnVuY3Rpb24oZSl7dmFyIGk9ZS5wb3NpdGl2ZVZhbHVlcy5jb25jYXQoZS5uZWdhdGl2ZVZhbHVlcyksbj11dC5taW4oaSksYT11dC5tYXgoaSk7dC5taW49bnVsbD09PXQubWluP246TWF0aC5taW4odC5taW4sbiksdC5tYXg9bnVsbD09PXQubWF4P2E6TWF0aC5tYXgodC5tYXgsYSl9KX1lbHNlIHV0LmVhY2gobixmdW5jdGlvbihlLG4pe3ZhciBhPWkuZ2V0RGF0YXNldE1ldGEobik7aS5pc0RhdGFzZXRWaXNpYmxlKG4pJiZyKGEpJiZ1dC5lYWNoKGUuZGF0YSxmdW5jdGlvbihlLGkpe3ZhciBuPSt0LmdldFJpZ2h0VmFsdWUoZSk7aXNOYU4obil8fGEuZGF0YVtpXS5oaWRkZW58fChudWxsPT09dC5taW4/dC5taW49bjpuPHQubWluJiYodC5taW49biksbnVsbD09PXQubWF4P3QubWF4PW46bj50Lm1heCYmKHQubWF4PW4pKX0pfSk7dC5taW49aXNGaW5pdGUodC5taW4pJiYhaXNOYU4odC5taW4pP3QubWluOjAsdC5tYXg9aXNGaW5pdGUodC5tYXgpJiYhaXNOYU4odC5tYXgpP3QubWF4OjEsdGhpcy5oYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCl9LF9jb21wdXRlVGlja0xpbWl0OmZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuaXNIb3Jpem9udGFsKCk/TWF0aC5jZWlsKHRoaXMud2lkdGgvNDApOih0PXV0Lm9wdGlvbnMuX3BhcnNlRm9udCh0aGlzLm9wdGlvbnMudGlja3MpLE1hdGguY2VpbCh0aGlzLmhlaWdodC90LmxpbmVIZWlnaHQpKX0saGFuZGxlRGlyZWN0aW9uYWxDaGFuZ2VzOmZ1bmN0aW9uKCl7dGhpcy5pc0hvcml6b250YWwoKXx8dGhpcy50aWNrcy5yZXZlcnNlKCl9LGdldExhYmVsRm9ySW5kZXg6ZnVuY3Rpb24odCxlKXtyZXR1cm4rdGhpcy5nZXRSaWdodFZhbHVlKHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1tlXS5kYXRhW3RdKX0sZ2V0UGl4ZWxGb3JWYWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9ZS5zdGFydCxuPStlLmdldFJpZ2h0VmFsdWUodCksYT1lLmVuZC1pO3JldHVybiBlLmlzSG9yaXpvbnRhbCgpP2UubGVmdCtlLndpZHRoL2EqKG4taSk6ZS5ib3R0b20tZS5oZWlnaHQvYSoobi1pKX0sZ2V0VmFsdWVGb3JQaXhlbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9ZS5pc0hvcml6b250YWwoKSxuPWk/ZS53aWR0aDplLmhlaWdodCxhPShpP3QtZS5sZWZ0OmUuYm90dG9tLXQpL247cmV0dXJuIGUuc3RhcnQrKGUuZW5kLWUuc3RhcnQpKmF9LGdldFBpeGVsRm9yVGljazpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRQaXhlbEZvclZhbHVlKHRoaXMudGlja3NBc051bWJlcnNbdF0pfX0pLF9pPWJpO3hpLl9kZWZhdWx0cz1faTt2YXIga2k9dXQudmFsdWVPckRlZmF1bHQ7dmFyIHdpPXtwb3NpdGlvbjoibGVmdCIsdGlja3M6e2NhbGxiYWNrOmxpLmZvcm1hdHRlcnMubG9nYXJpdGhtaWN9fTtmdW5jdGlvbiBNaSh0LGUpe3JldHVybiB1dC5pc0Zpbml0ZSh0KSYmdD49MD90OmV9dmFyIFNpPWZpLmV4dGVuZCh7ZGV0ZXJtaW5lRGF0YUxpbWl0czpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10Lm9wdGlvbnMsaT10LmNoYXJ0LG49aS5kYXRhLmRhdGFzZXRzLGE9dC5pc0hvcml6b250YWwoKTtmdW5jdGlvbiByKGUpe3JldHVybiBhP2UueEF4aXNJRD09PXQuaWQ6ZS55QXhpc0lEPT09dC5pZH10Lm1pbj1udWxsLHQubWF4PW51bGwsdC5taW5Ob3RaZXJvPW51bGw7dmFyIG89ZS5zdGFja2VkO2lmKHZvaWQgMD09PW8mJnV0LmVhY2gobixmdW5jdGlvbih0LGUpe2lmKCFvKXt2YXIgbj1pLmdldERhdGFzZXRNZXRhKGUpO2kuaXNEYXRhc2V0VmlzaWJsZShlKSYmcihuKSYmdm9pZCAwIT09bi5zdGFjayYmKG89ITApfX0pLGUuc3RhY2tlZHx8byl7dmFyIHM9e307dXQuZWFjaChuLGZ1bmN0aW9uKG4sYSl7dmFyIG89aS5nZXREYXRhc2V0TWV0YShhKSxsPVtvLnR5cGUsdm9pZCAwPT09ZS5zdGFja2VkJiZ2b2lkIDA9PT1vLnN0YWNrP2E6IiIsby5zdGFja10uam9pbigiLiIpO2kuaXNEYXRhc2V0VmlzaWJsZShhKSYmcihvKSYmKHZvaWQgMD09PXNbbF0mJihzW2xdPVtdKSx1dC5lYWNoKG4uZGF0YSxmdW5jdGlvbihlLGkpe3ZhciBuPXNbbF0sYT0rdC5nZXRSaWdodFZhbHVlKGUpO2lzTmFOKGEpfHxvLmRhdGFbaV0uaGlkZGVufHxhPDB8fChuW2ldPW5baV18fDAsbltpXSs9YSl9KSl9KSx1dC5lYWNoKHMsZnVuY3Rpb24oZSl7aWYoZS5sZW5ndGg+MCl7dmFyIGk9dXQubWluKGUpLG49dXQubWF4KGUpO3QubWluPW51bGw9PT10Lm1pbj9pOk1hdGgubWluKHQubWluLGkpLHQubWF4PW51bGw9PT10Lm1heD9uOk1hdGgubWF4KHQubWF4LG4pfX0pfWVsc2UgdXQuZWFjaChuLGZ1bmN0aW9uKGUsbil7dmFyIGE9aS5nZXREYXRhc2V0TWV0YShuKTtpLmlzRGF0YXNldFZpc2libGUobikmJnIoYSkmJnV0LmVhY2goZS5kYXRhLGZ1bmN0aW9uKGUsaSl7dmFyIG49K3QuZ2V0UmlnaHRWYWx1ZShlKTtpc05hTihuKXx8YS5kYXRhW2ldLmhpZGRlbnx8bjwwfHwobnVsbD09PXQubWluP3QubWluPW46bjx0Lm1pbiYmKHQubWluPW4pLG51bGw9PT10Lm1heD90Lm1heD1uOm4+dC5tYXgmJih0Lm1heD1uKSwwIT09biYmKG51bGw9PT10Lm1pbk5vdFplcm98fG48dC5taW5Ob3RaZXJvKSYmKHQubWluTm90WmVybz1uKSl9KX0pO3RoaXMuaGFuZGxlVGlja1JhbmdlT3B0aW9ucygpfSxoYW5kbGVUaWNrUmFuZ2VPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQub3B0aW9ucy50aWNrczt0Lm1pbj1NaShlLm1pbix0Lm1pbiksdC5tYXg9TWkoZS5tYXgsdC5tYXgpLHQubWluPT09dC5tYXgmJigwIT09dC5taW4mJm51bGwhPT10Lm1pbj8odC5taW49TWF0aC5wb3coMTAsTWF0aC5mbG9vcih1dC5sb2cxMCh0Lm1pbikpLTEpLHQubWF4PU1hdGgucG93KDEwLE1hdGguZmxvb3IodXQubG9nMTAodC5tYXgpKSsxKSk6KHQubWluPTEsdC5tYXg9MTApKSxudWxsPT09dC5taW4mJih0Lm1pbj1NYXRoLnBvdygxMCxNYXRoLmZsb29yKHV0LmxvZzEwKHQubWF4KSktMSkpLG51bGw9PT10Lm1heCYmKHQubWF4PTAhPT10Lm1pbj9NYXRoLnBvdygxMCxNYXRoLmZsb29yKHV0LmxvZzEwKHQubWluKSkrMSk6MTApLG51bGw9PT10Lm1pbk5vdFplcm8mJih0Lm1pbj4wP3QubWluTm90WmVybz10Lm1pbjp0Lm1heDwxP3QubWluTm90WmVybz1NYXRoLnBvdygxMCxNYXRoLmZsb29yKHV0LmxvZzEwKHQubWF4KSkpOnQubWluTm90WmVybz0xKX0sYnVpbGRUaWNrczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10Lm9wdGlvbnMudGlja3MsaT0hdC5pc0hvcml6b250YWwoKSxuPXttaW46TWkoZS5taW4pLG1heDpNaShlLm1heCl9LGE9dC50aWNrcz1mdW5jdGlvbih0LGUpe3ZhciBpLG4sYT1bXSxyPWtpKHQubWluLE1hdGgucG93KDEwLE1hdGguZmxvb3IodXQubG9nMTAoZS5taW4pKSkpLG89TWF0aC5mbG9vcih1dC5sb2cxMChlLm1heCkpLHM9TWF0aC5jZWlsKGUubWF4L01hdGgucG93KDEwLG8pKTswPT09cj8oaT1NYXRoLmZsb29yKHV0LmxvZzEwKGUubWluTm90WmVybykpLG49TWF0aC5mbG9vcihlLm1pbk5vdFplcm8vTWF0aC5wb3coMTAsaSkpLGEucHVzaChyKSxyPW4qTWF0aC5wb3coMTAsaSkpOihpPU1hdGguZmxvb3IodXQubG9nMTAocikpLG49TWF0aC5mbG9vcihyL01hdGgucG93KDEwLGkpKSk7dmFyIGw9aTwwP01hdGgucG93KDEwLE1hdGguYWJzKGkpKToxO2Rve2EucHVzaChyKSwxMD09KytuJiYobj0xLGw9KytpPj0wPzE6bCkscj1NYXRoLnJvdW5kKG4qTWF0aC5wb3coMTAsaSkqbCkvbH13aGlsZShpPG98fGk9PT1vJiZuPHMpO3ZhciB1PWtpKHQubWF4LHIpO3JldHVybiBhLnB1c2godSksYX0obix0KTt0Lm1heD11dC5tYXgoYSksdC5taW49dXQubWluKGEpLGUucmV2ZXJzZT8oaT0haSx0LnN0YXJ0PXQubWF4LHQuZW5kPXQubWluKToodC5zdGFydD10Lm1pbix0LmVuZD10Lm1heCksaSYmYS5yZXZlcnNlKCl9LGNvbnZlcnRUaWNrc1RvTGFiZWxzOmZ1bmN0aW9uKCl7dGhpcy50aWNrVmFsdWVzPXRoaXMudGlja3Muc2xpY2UoKSxmaS5wcm90b3R5cGUuY29udmVydFRpY2tzVG9MYWJlbHMuY2FsbCh0aGlzKX0sZ2V0TGFiZWxGb3JJbmRleDpmdW5jdGlvbih0LGUpe3JldHVybit0aGlzLmdldFJpZ2h0VmFsdWUodGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzW2VdLmRhdGFbdF0pfSxnZXRQaXhlbEZvclRpY2s6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZ2V0UGl4ZWxGb3JWYWx1ZSh0aGlzLnRpY2tWYWx1ZXNbdF0pfSxfZ2V0Rmlyc3RUaWNrVmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcih1dC5sb2cxMCh0KSk7cmV0dXJuIE1hdGguZmxvb3IodC9NYXRoLnBvdygxMCxlKSkqTWF0aC5wb3coMTAsZSl9LGdldFBpeGVsRm9yVmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUsaSxuLGEscixvPXRoaXMscz1vLm9wdGlvbnMudGlja3MsbD1zLnJldmVyc2UsdT11dC5sb2cxMCxkPW8uX2dldEZpcnN0VGlja1ZhbHVlKG8ubWluTm90WmVybyksaD0wO3JldHVybiB0PStvLmdldFJpZ2h0VmFsdWUodCksbD8obj1vLmVuZCxhPW8uc3RhcnQscj0tMSk6KG49by5zdGFydCxhPW8uZW5kLHI9MSksby5pc0hvcml6b250YWwoKT8oZT1vLndpZHRoLGk9bD9vLnJpZ2h0Om8ubGVmdCk6KGU9by5oZWlnaHQscio9LTEsaT1sP28udG9wOm8uYm90dG9tKSx0IT09biYmKDA9PT1uJiYoZS09aD1raShzLmZvbnRTaXplLG90Lmdsb2JhbC5kZWZhdWx0Rm9udFNpemUpLG49ZCksMCE9PXQmJihoKz1lLyh1KGEpLXUobikpKih1KHQpLXUobikpKSxpKz1yKmgpLGl9LGdldFZhbHVlRm9yUGl4ZWw6ZnVuY3Rpb24odCl7dmFyIGUsaSxuLGEscj10aGlzLG89ci5vcHRpb25zLnRpY2tzLHM9by5yZXZlcnNlLGw9dXQubG9nMTAsdT1yLl9nZXRGaXJzdFRpY2tWYWx1ZShyLm1pbk5vdFplcm8pO2lmKHM/KGk9ci5lbmQsbj1yLnN0YXJ0KTooaT1yLnN0YXJ0LG49ci5lbmQpLHIuaXNIb3Jpem9udGFsKCk/KGU9ci53aWR0aCxhPXM/ci5yaWdodC10OnQtci5sZWZ0KTooZT1yLmhlaWdodCxhPXM/dC1yLnRvcDpyLmJvdHRvbS10KSxhIT09aSl7aWYoMD09PWkpe3ZhciBkPWtpKG8uZm9udFNpemUsb3QuZ2xvYmFsLmRlZmF1bHRGb250U2l6ZSk7YS09ZCxlLT1kLGk9dX1hKj1sKG4pLWwoaSksYS89ZSxhPU1hdGgucG93KDEwLGwoaSkrYSl9cmV0dXJuIGF9fSksRGk9d2k7U2kuX2RlZmF1bHRzPURpO3ZhciBDaT11dC52YWx1ZU9yRGVmYXVsdCxQaT11dC52YWx1ZUF0SW5kZXhPckRlZmF1bHQsVGk9dXQub3B0aW9ucy5yZXNvbHZlLE9pPXtkaXNwbGF5OiEwLGFuaW1hdGU6ITAscG9zaXRpb246ImNoYXJ0QXJlYSIsYW5nbGVMaW5lczp7ZGlzcGxheTohMCxjb2xvcjoicmdiYSgwLCAwLCAwLCAwLjEpIixsaW5lV2lkdGg6MSxib3JkZXJEYXNoOltdLGJvcmRlckRhc2hPZmZzZXQ6MH0sZ3JpZExpbmVzOntjaXJjdWxhcjohMX0sdGlja3M6e3Nob3dMYWJlbEJhY2tkcm9wOiEwLGJhY2tkcm9wQ29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC43NSkiLGJhY2tkcm9wUGFkZGluZ1k6MixiYWNrZHJvcFBhZGRpbmdYOjIsY2FsbGJhY2s6bGkuZm9ybWF0dGVycy5saW5lYXJ9LHBvaW50TGFiZWxzOntkaXNwbGF5OiEwLGZvbnRTaXplOjEwLGNhbGxiYWNrOmZ1bmN0aW9uKHQpe3JldHVybiB0fX19O2Z1bmN0aW9uIElpKHQpe3ZhciBlPXQub3B0aW9ucztyZXR1cm4gZS5hbmdsZUxpbmVzLmRpc3BsYXl8fGUucG9pbnRMYWJlbHMuZGlzcGxheT90LmNoYXJ0LmRhdGEubGFiZWxzLmxlbmd0aDowfWZ1bmN0aW9uIEFpKHQpe3ZhciBlPXQudGlja3M7cmV0dXJuIGUuZGlzcGxheSYmdC5kaXNwbGF5P0NpKGUuZm9udFNpemUsb3QuZ2xvYmFsLmRlZmF1bHRGb250U2l6ZSkrMiplLmJhY2tkcm9wUGFkZGluZ1k6MH1mdW5jdGlvbiBGaSh0LGUsaSxuLGEpe3JldHVybiB0PT09bnx8dD09PWE/e3N0YXJ0OmUtaS8yLGVuZDplK2kvMn06dDxufHx0PmE/e3N0YXJ0OmUtaSxlbmQ6ZX06e3N0YXJ0OmUsZW5kOmUraX19ZnVuY3Rpb24gUmkodCl7cmV0dXJuIDA9PT10fHwxODA9PT10PyJjZW50ZXIiOnQ8MTgwPyJsZWZ0IjoicmlnaHQifWZ1bmN0aW9uIExpKHQsZSxpLG4pe3ZhciBhLHIsbz1pLnkrbi8yO2lmKHV0LmlzQXJyYXkoZSkpZm9yKGE9MCxyPWUubGVuZ3RoO2E8cjsrK2EpdC5maWxsVGV4dChlW2FdLGkueCxvKSxvKz1uO2Vsc2UgdC5maWxsVGV4dChlLGkueCxvKX1mdW5jdGlvbiBXaSh0LGUsaSl7OTA9PT10fHwyNzA9PT10P2kueS09ZS5oLzI6KHQ+MjcwfHx0PDkwKSYmKGkueS09ZS5oKX1mdW5jdGlvbiBZaSh0KXtyZXR1cm4gdXQuaXNOdW1iZXIodCk/dDowfXZhciBOaT15aS5leHRlbmQoe3NldERpbWVuc2lvbnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3Qud2lkdGg9dC5tYXhXaWR0aCx0LmhlaWdodD10Lm1heEhlaWdodCx0LnBhZGRpbmdUb3A9QWkodC5vcHRpb25zKS8yLHQueENlbnRlcj1NYXRoLmZsb29yKHQud2lkdGgvMiksdC55Q2VudGVyPU1hdGguZmxvb3IoKHQuaGVpZ2h0LXQucGFkZGluZ1RvcCkvMiksdC5kcmF3aW5nQXJlYT1NYXRoLm1pbih0LmhlaWdodC10LnBhZGRpbmdUb3AsdC53aWR0aCkvMn0sZGV0ZXJtaW5lRGF0YUxpbWl0czpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LmNoYXJ0LGk9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG49TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO3V0LmVhY2goZS5kYXRhLmRhdGFzZXRzLGZ1bmN0aW9uKGEscil7aWYoZS5pc0RhdGFzZXRWaXNpYmxlKHIpKXt2YXIgbz1lLmdldERhdGFzZXRNZXRhKHIpO3V0LmVhY2goYS5kYXRhLGZ1bmN0aW9uKGUsYSl7dmFyIHI9K3QuZ2V0UmlnaHRWYWx1ZShlKTtpc05hTihyKXx8by5kYXRhW2FdLmhpZGRlbnx8KGk9TWF0aC5taW4ocixpKSxuPU1hdGgubWF4KHIsbikpfSl9fSksdC5taW49aT09PU51bWJlci5QT1NJVElWRV9JTkZJTklUWT8wOmksdC5tYXg9bj09PU51bWJlci5ORUdBVElWRV9JTkZJTklUWT8wOm4sdC5oYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCl9LF9jb21wdXRlVGlja0xpbWl0OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmRyYXdpbmdBcmVhL0FpKHRoaXMub3B0aW9ucykpfSxjb252ZXJ0VGlja3NUb0xhYmVsczpmdW5jdGlvbigpe3ZhciB0PXRoaXM7eWkucHJvdG90eXBlLmNvbnZlcnRUaWNrc1RvTGFiZWxzLmNhbGwodCksdC5wb2ludExhYmVscz10LmNoYXJ0LmRhdGEubGFiZWxzLm1hcCh0Lm9wdGlvbnMucG9pbnRMYWJlbHMuY2FsbGJhY2ssdCl9LGdldExhYmVsRm9ySW5kZXg6ZnVuY3Rpb24odCxlKXtyZXR1cm4rdGhpcy5nZXRSaWdodFZhbHVlKHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1tlXS5kYXRhW3RdKX0sZml0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO3QuZGlzcGxheSYmdC5wb2ludExhYmVscy5kaXNwbGF5P2Z1bmN0aW9uKHQpe3ZhciBlLGksbixhPXV0Lm9wdGlvbnMuX3BhcnNlRm9udCh0Lm9wdGlvbnMucG9pbnRMYWJlbHMpLHI9e2w6MCxyOnQud2lkdGgsdDowLGI6dC5oZWlnaHQtdC5wYWRkaW5nVG9wfSxvPXt9O3QuY3R4LmZvbnQ9YS5zdHJpbmcsdC5fcG9pbnRMYWJlbFNpemVzPVtdO3ZhciBzLGwsdSxkPUlpKHQpO2ZvcihlPTA7ZTxkO2UrKyl7bj10LmdldFBvaW50UG9zaXRpb24oZSx0LmRyYXdpbmdBcmVhKzUpLHM9dC5jdHgsbD1hLmxpbmVIZWlnaHQsdT10LnBvaW50TGFiZWxzW2VdfHwiIixpPXV0LmlzQXJyYXkodSk/e3c6dXQubG9uZ2VzdFRleHQocyxzLmZvbnQsdSksaDp1Lmxlbmd0aCpsfTp7dzpzLm1lYXN1cmVUZXh0KHUpLndpZHRoLGg6bH0sdC5fcG9pbnRMYWJlbFNpemVzW2VdPWk7dmFyIGg9dC5nZXRJbmRleEFuZ2xlKGUpLGM9dXQudG9EZWdyZWVzKGgpJTM2MCxmPUZpKGMsbi54LGkudywwLDE4MCksZz1GaShjLG4ueSxpLmgsOTAsMjcwKTtmLnN0YXJ0PHIubCYmKHIubD1mLnN0YXJ0LG8ubD1oKSxmLmVuZD5yLnImJihyLnI9Zi5lbmQsby5yPWgpLGcuc3RhcnQ8ci50JiYoci50PWcuc3RhcnQsby50PWgpLGcuZW5kPnIuYiYmKHIuYj1nLmVuZCxvLmI9aCl9dC5zZXRSZWR1Y3Rpb25zKHQuZHJhd2luZ0FyZWEscixvKX0odGhpcyk6dGhpcy5zZXRDZW50ZXJQb2ludCgwLDAsMCwwKX0sc2V0UmVkdWN0aW9uczpmdW5jdGlvbih0LGUsaSl7dmFyIG49dGhpcyxhPWUubC9NYXRoLnNpbihpLmwpLHI9TWF0aC5tYXgoZS5yLW4ud2lkdGgsMCkvTWF0aC5zaW4oaS5yKSxvPS1lLnQvTWF0aC5jb3MoaS50KSxzPS1NYXRoLm1heChlLmItKG4uaGVpZ2h0LW4ucGFkZGluZ1RvcCksMCkvTWF0aC5jb3MoaS5iKTthPVlpKGEpLHI9WWkociksbz1ZaShvKSxzPVlpKHMpLG4uZHJhd2luZ0FyZWE9TWF0aC5taW4oTWF0aC5mbG9vcih0LShhK3IpLzIpLE1hdGguZmxvb3IodC0obytzKS8yKSksbi5zZXRDZW50ZXJQb2ludChhLHIsbyxzKX0sc2V0Q2VudGVyUG9pbnQ6ZnVuY3Rpb24odCxlLGksbil7dmFyIGE9dGhpcyxyPWEud2lkdGgtZS1hLmRyYXdpbmdBcmVhLG89dCthLmRyYXdpbmdBcmVhLHM9aSthLmRyYXdpbmdBcmVhLGw9YS5oZWlnaHQtYS5wYWRkaW5nVG9wLW4tYS5kcmF3aW5nQXJlYTthLnhDZW50ZXI9TWF0aC5mbG9vcigobytyKS8yK2EubGVmdCksYS55Q2VudGVyPU1hdGguZmxvb3IoKHMrbCkvMithLnRvcCthLnBhZGRpbmdUb3ApfSxnZXRJbmRleEFuZ2xlOmZ1bmN0aW9uKHQpe3JldHVybiB0KigyKk1hdGguUEkvSWkodGhpcykpKyh0aGlzLmNoYXJ0Lm9wdGlvbnMmJnRoaXMuY2hhcnQub3B0aW9ucy5zdGFydEFuZ2xlP3RoaXMuY2hhcnQub3B0aW9ucy5zdGFydEFuZ2xlOjApKk1hdGguUEkqMi8zNjB9LGdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYobnVsbD09PXQpcmV0dXJuIDA7dmFyIGk9ZS5kcmF3aW5nQXJlYS8oZS5tYXgtZS5taW4pO3JldHVybiBlLm9wdGlvbnMudGlja3MucmV2ZXJzZT8oZS5tYXgtdCkqaToodC1lLm1pbikqaX0sZ2V0UG9pbnRQb3NpdGlvbjpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuZ2V0SW5kZXhBbmdsZSh0KS1NYXRoLlBJLzI7cmV0dXJue3g6TWF0aC5jb3MoaSkqZSt0aGlzLnhDZW50ZXIseTpNYXRoLnNpbihpKSplK3RoaXMueUNlbnRlcn19LGdldFBvaW50UG9zaXRpb25Gb3JWYWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldFBvaW50UG9zaXRpb24odCx0aGlzLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKGUpKX0sZ2V0QmFzZVBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5taW4sZT10aGlzLm1heDtyZXR1cm4gdGhpcy5nZXRQb2ludFBvc2l0aW9uRm9yVmFsdWUoMCx0aGlzLmJlZ2luQXRaZXJvPzA6dDwwJiZlPDA/ZTp0PjAmJmU+MD90OjApfSxkcmF3OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQub3B0aW9ucyxpPWUuZ3JpZExpbmVzLG49ZS50aWNrcztpZihlLmRpc3BsYXkpe3ZhciBhPXQuY3R4LHI9dGhpcy5nZXRJbmRleEFuZ2xlKDApLG89dXQub3B0aW9ucy5fcGFyc2VGb250KG4pOyhlLmFuZ2xlTGluZXMuZGlzcGxheXx8ZS5wb2ludExhYmVscy5kaXNwbGF5KSYmZnVuY3Rpb24odCl7dmFyIGU9dC5jdHgsaT10Lm9wdGlvbnMsbj1pLmFuZ2xlTGluZXMsYT1pLmdyaWRMaW5lcyxyPWkucG9pbnRMYWJlbHMsbz1DaShuLmxpbmVXaWR0aCxhLmxpbmVXaWR0aCkscz1DaShuLmNvbG9yLGEuY29sb3IpLGw9QWkoaSk7ZS5zYXZlKCksZS5saW5lV2lkdGg9byxlLnN0cm9rZVN0eWxlPXMsZS5zZXRMaW5lRGFzaCYmKGUuc2V0TGluZURhc2goVGkoW24uYm9yZGVyRGFzaCxhLmJvcmRlckRhc2gsW11dKSksZS5saW5lRGFzaE9mZnNldD1UaShbbi5ib3JkZXJEYXNoT2Zmc2V0LGEuYm9yZGVyRGFzaE9mZnNldCwwXSkpO3ZhciB1PXQuZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUoaS50aWNrcy5yZXZlcnNlP3QubWluOnQubWF4KSxkPXV0Lm9wdGlvbnMuX3BhcnNlRm9udChyKTtlLmZvbnQ9ZC5zdHJpbmcsZS50ZXh0QmFzZWxpbmU9Im1pZGRsZSI7Zm9yKHZhciBoPUlpKHQpLTE7aD49MDtoLS0pe2lmKG4uZGlzcGxheSYmbyYmcyl7dmFyIGM9dC5nZXRQb2ludFBvc2l0aW9uKGgsdSk7ZS5iZWdpblBhdGgoKSxlLm1vdmVUbyh0LnhDZW50ZXIsdC55Q2VudGVyKSxlLmxpbmVUbyhjLngsYy55KSxlLnN0cm9rZSgpfWlmKHIuZGlzcGxheSl7dmFyIGY9MD09PWg/bC8yOjAsZz10LmdldFBvaW50UG9zaXRpb24oaCx1K2YrNSksbT1QaShyLmZvbnRDb2xvcixoLG90Lmdsb2JhbC5kZWZhdWx0Rm9udENvbG9yKTtlLmZpbGxTdHlsZT1tO3ZhciBwPXQuZ2V0SW5kZXhBbmdsZShoKSx2PXV0LnRvRGVncmVlcyhwKTtlLnRleHRBbGlnbj1SaSh2KSxXaSh2LHQuX3BvaW50TGFiZWxTaXplc1toXSxnKSxMaShlLHQucG9pbnRMYWJlbHNbaF18fCIiLGcsZC5saW5lSGVpZ2h0KX19ZS5yZXN0b3JlKCl9KHQpLHV0LmVhY2godC50aWNrcyxmdW5jdGlvbihlLHMpe2lmKHM+MHx8bi5yZXZlcnNlKXt2YXIgbD10LmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKHQudGlja3NBc051bWJlcnNbc10pO2lmKGkuZGlzcGxheSYmMCE9PXMmJmZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBhLHI9dC5jdHgsbz1lLmNpcmN1bGFyLHM9SWkodCksbD1QaShlLmNvbG9yLG4tMSksdT1QaShlLmxpbmVXaWR0aCxuLTEpO2lmKChvfHxzKSYmbCYmdSl7aWYoci5zYXZlKCksci5zdHJva2VTdHlsZT1sLHIubGluZVdpZHRoPXUsci5zZXRMaW5lRGFzaCYmKHIuc2V0TGluZURhc2goZS5ib3JkZXJEYXNofHxbXSksci5saW5lRGFzaE9mZnNldD1lLmJvcmRlckRhc2hPZmZzZXR8fDApLHIuYmVnaW5QYXRoKCksbylyLmFyYyh0LnhDZW50ZXIsdC55Q2VudGVyLGksMCwyKk1hdGguUEkpO2Vsc2V7YT10LmdldFBvaW50UG9zaXRpb24oMCxpKSxyLm1vdmVUbyhhLngsYS55KTtmb3IodmFyIGQ9MTtkPHM7ZCsrKWE9dC5nZXRQb2ludFBvc2l0aW9uKGQsaSksci5saW5lVG8oYS54LGEueSl9ci5jbG9zZVBhdGgoKSxyLnN0cm9rZSgpLHIucmVzdG9yZSgpfX0odCxpLGwscyksbi5kaXNwbGF5KXt2YXIgdT1DaShuLmZvbnRDb2xvcixvdC5nbG9iYWwuZGVmYXVsdEZvbnRDb2xvcik7aWYoYS5mb250PW8uc3RyaW5nLGEuc2F2ZSgpLGEudHJhbnNsYXRlKHQueENlbnRlcix0LnlDZW50ZXIpLGEucm90YXRlKHIpLG4uc2hvd0xhYmVsQmFja2Ryb3Ape3ZhciBkPWEubWVhc3VyZQ=="
}

github/deemru/w8io/169f3d6 
4.27 ms